一、TCP报文段的首部格式
- 源端口和目的端口各占2字节,分别填源端口号和目的端口号;
- ?序号(报文段序号):占4字节(0~232-1),表示本报文段发送的第一个字节的序号(TCP连接中传送的字节流中每一个字节都按顺序编号)。如本报文段序号为21,携带100字节的数据即最后一个字节的序号为120,则下一个报文段的序号为121;
- 确认号:占4字节,期望收到的对方下一个报文段的序号。如已确认收到带100字节数据的序号为21的报文段,则在发送的确认报文中,将确认号置为121。
- 数据偏移:占4位,TCP报文段的首部长度,以4字节为计算单位。最大15能表示60字节,固定首部长度20字节,所以选项最多40字节。
- 保留位暂无定义,为0;
- URG紧急:URG=1时,表示紧急指针字段有效:告诉该报文段有紧急信息,发送方的TCP就将紧急数据插入到本报文段数据的最前面,配合紧急指针字段使用;
- ACK确认:ACK=1时,确认号字段才有效。TCP规定,在建立连接后传送的所有报文ACK都置1;
- PSH推送:发送方希望快速得到响应时将PSH置1,接收方TCP收到PSH置1的报文后,立即交付接收应用进程,而不是等到缓冲区满;
- RST复位:置1表示出现严重错误需要立即释放连接并重新建立,还表示拒绝一个非法报文或拒绝打开一个连接;
- SYN同步:在建立连接时用来同步序号,置1表示这是一个请求连接或同意连接报文;
- FIN终止:用来释放连接,置1表示数据传输完毕,请求释放连接;
- 窗口:占2字节,表示自己的接收数据缓存空间还剩的字节数:明确指出现在允许对方发送的数据量;
- 校验和:占2字节,包括首部和数据以及伪首部(同UDP,包含源IP,目的IP,类型协议和长度,只是计算时加入,既不向上递也不向下传,接收时数据从所在IP分组中提取)每16位求和取反,校验时同样计算比对;
- 紧急指针:占2字节,仅在URG=1时有效,指出紧急数据末尾在报文中的位置,在窗口为0时紧急数据仍可发送;
- 选项:长度可变,最长为40字节。如MSS选项(每个TCP报文段中数据字段的最大长度:避免因数据过短利用率低,过长分片重组开销大),窗口扩大选项(窗口字段16位表示的64K字节不足以使用时),时间戳选项(用来计算往返时间TTL和防止序号绕回:区分新报文段和迟到很久的报文段)和选择确认选项等。
二、TCP的连接
1、连接建立:采用客户/服务器模式,主动发起连接的应用程序为客户。
?
- ?A和B的TCP服务进程首先创建传输控制块TCB(存储每个链接的重要东西:如TCP连接表,发送和接收缓存的指针,指向重传队列的指针,当前的发送和接收队列等);
- A向B发送请求连接报文段:SYN置1同时为自己选择一个初始序号seq=x;
- B同意连接后发送确认:SYN和ACK置1同时为自己选择一个初始序号seq=y,确认号ack=x+1(规定SYN=1的报文不携带数据,但是会消耗一个序号);
- A收到B的确认后向B发送确认:ACK确认位置1,序号seq=x+1,确认号ack=y+1(若A没有再次发送确认,即没有第三次握手,则A发送的无效请求(超时到达被重发的请求)再次到达B时B会建立新的连接,但A并没发出请求会造成资源浪费);
- 保活计时器:为防止客户主动建立连接后故障,服务器持续等待的情况,服务器每收到一次客户的数据就重设保活计时器。
2、数据传送
- 数据传送:若A先向B传送数据,序号seq=x+1,确认号ack=y+1(规定确认报文可以携带数据,但是不携带数据时不消耗序号),A和B处于已连接状态ACK始终置1。
3、连接释放:四次挥手
- ?A先向B发送释放连接报文FIN置1,序号seq=u=A发送的前一个报文数据最后一个字节+1,并进入终止等待1状态;
- B收到后发送确认,ACK置1,序号seq=v=B发送的前一个报文数据最后一个字节+1,确认号ack=u+1(FIN=1的报文不携带数据,大消耗1个序号),B进入关闭等待状态,此时A向B的连接已单向断开(A不能再向B传数据),A进入终止等待状态2;
- B若还有数据则可继续传送,传送完后向A发送释放连接报文FIN置1,序号seq=w=B发送的前一个报文数据最后一个字节+1,确认号ack=u+1(ACK=1的报文可携带数据,不携带数据时不消耗序号),B进入最后等待状态;
- A收到连接释放报文后发送确认:ACK置1,seq=u+1,ack=w+1(FIN=1的报文不携带数据但消耗一个序号),A进入时间等待状态等待2MSL(最长报文段寿命):为保证最后一个确认报文到达B;之后才真正断开连接并清除连接持续时间内产生的所有报文段:使下一个新连接中不会出现已失效的旧连接。
三、可靠传输之停止等待协议(自动重传请求ARQ):每发送一个分组后等待收到确认再发送下一个分组
TCP往下的网络层提供的是不可靠的数据连接,所以,TCP必须采取适当有效的措施使得两个传输层之间的通信变得可靠:不产生差错,发送方发送数据速度和接收方接收速度匹配。
- A在每发送完一次分组后应保留分组副本直到收到确认再清除;
- ?超时计时器的重传时间应比数据在分组传输的平均往返时间长一些;
- 信道利用率不高:大部分时间都在等待确认。
- 以上称自动重传请求ARQ:重传的请求是自动的,接收方不需要请求发送方重传某个出错的分组。
四、可靠传输之滑动窗口协议:流水线发送,而不需要一个个等待确认
1、连续ARQ协议(回退N协议GBN)
- 假设窗口大小为5:在窗口中的5个分组都可以连续发出去,而不需要一个个等待确认;
- 接收方累计确认:对按顺序到达的最后一个分组发送确认。如上图d,接收方发送确认序号为3,即对方希望下个报文的序号是3,表示3之前的报文都按顺序到达了;
- 发送方每收到一个确认就将窗口向前滑动,如上图从c到d滑动到2以后的位置;
- 若出现丢失:如上图d,发送方只收到前3个分组的确认,后两个无法直到,于是对后两个分组都进行重传(即使4号已经正确到达而3还在路上)所以又叫做回退N协议。在通信线路质量不好时,连续ARQ协议会带来负面影响。
2、选择重传协议SR
五、TCP流量控制
六、TCP拥塞控制
?
?
?
|