传输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)
传输层还要对收到的报文进行差错检测
传输层提供面向连接和无连接的服务
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
端口号 | 服务 |
---|---|
21 | FTP |
23 | telnet |
53 | DNS |
80 | http |
443 | https |
TCP 连接的端点做套接字(socket)
套接字的表示方法:在点分十进制的 IP 地址后面写上端口号,中
用冒号或逗号隔开
套接字 socket = (IP 地址:端口号)
152.136.221.206:443
每一条 TCP 连接唯一地被通信两端的两个端点(两个socket)所确定
TCP 连接 = {socket1, sockct2} = {(IP1: port1), (IP2: port2))
数据链路层的可靠传输通常使用 确认 和 超时重传 两种机制来完成。
在发送完一个分组后,必须暂时保留己发送的分组的副本
分组和确认分组都必须进行编号
在不可靠的传输网络上实现可靠的通信
自动重传请求ARQ
累积确认:接收方对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都己正确收到了
优点:容易实现,信道利用率高
缺点:不能向发送方反映出接收方己经正确收到的所有分组的信息
TCP连接的每一端都必须设有两个窗口:一个发送窗口和一个接收窗口
TCP的可靠传输机制用字节的序号进行控制
环形窗口
让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞
发送方和接收方死锁局面的产生:ack=1、接受窗口为0
TCP 为每一个连接设有一个持续计时器
资源拥塞的原因:对资源需求的总和 > 可用资源
拥塞控制:是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素
流量控制:往往指在给定的发送端和接收端之间的点对点通信量的控制,它所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
拥塞窗口cwnd
原则:没拥塞就增大窗口、出现拥塞就减小窗口
SendWin=min{CongWin, RecvWin}:同时满足拥塞控制和流量控制要求
当 TCP 连接进行初始化时,将拥塞窗口cwnd置为1。
可用带宽可能 >> MSS/RTT,应该尽快加速,到达希望的速率。
当连接开始时,指数性增加(每个RTT)发送速率直到发生丢失事件(启动初值很低,但是速度很快)
乘性减:丢失事件后将cwnd降为1, 将cwnd / 2作为门限 ssthresh,进入慢启动阶段(倍增直到ssthresh)
加性增:当cwnd > 门限 ssthresh(上次发生拥塞的窗口的一半)时,一个RTT如没有发生丢失事件,将cwnd加1(探测)
快重传:接收方每收到一个失序的报文段后就立即发出重复确认,让发送方尽早知道有报文段没有到达接收方。
快恢复:发送方收到3个重复的ACKs,cwnd减半、窗口线性增长
当cwnd<ssthresh:发送端处于慢启动阶段,窗口指数性增长。
当cwnd > ssthresh:发送端处于拥塞避免阶段,窗口线性增长。
当收到三个重复的ACK:ssthresh设置成 cwnd/2,进入拥塞避免阶段。
当发生超时timeout:cwnd=1,进入慢启动阶段。
变化的初始序号 + 双方确认对方的序号(3次握手)
客户端,服务器分别关闭它自己这一侧的连接:发送FIN bit = 1
的TCP段
一旦接收到FIN
,用ACK
回应:接到FIN
段,ACK
可以和它自己发出的FIN
段一起发送,可以处理同时的FIN交换