TCP协议

报文格式

 

源端口/目的端口

序号确认号:连接建立时确认号是:收到数据的序号+1;数据传输时:确认号是:收到数据的序号+收到数据包中所带数据的长度(不包含IP头部和TCP头部,是纯数据的长度)。

首部长度:TCP首部的长度,以4字节为单位:>=20字节(4*5),>=60字节(4*15)。

保留位

控制字段

 

 

窗口大小:发送端定义自己的TCP的窗口大小,以字节为单位。接收端收到报文后知道对段的窗口大小是多少,然后决定自己的行为,不发送数据,或下次发送数据的多少。

检验和:TCP的检验和是强制的。计算检验和时需要添加伪首部,如下:

 

 

紧急指针:紧急标志位被置时有效。

选项:可选。

TCP状态转换

TCP连接建立

 

三次握手

1.      SYN

2.      SYN/ACK



3.      ACK

 


 

MSS

MSS: Maxitum Segment Size 最大分段大小。

建立tcp连接的两端在三次握手时会协商tcp mss大小,具体如下:   pc1 发出syn报文,其中option选项填充的mss字段一般为1460,同样www server收到syn报文后,会发送syn+ack报文应答,option选项填充的mss字段也为1460;协商双方会比较syn和syn+ack报文中mss字段大小,选择较小的mss作为发送tcp分片的大小。通过比较,协商双方的tcp mss都是1460。

对于网络层的上层协议而言(我们以TCP/IP协议族为例)网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。分片最大的坏处就是降低了传输性能,本来一次可以搞定的事情,分成多次搞定,所以在网络层更高一层(就是传输层)的实现中往往会对此加以注意!所以会在IP数据包包头里面加上一个标签:DF(Donot Fragment)。这样当这个IP数据包通过多个路由其进行网络传输的时候,如果遇到MTU小于IP数据包的情况,转发设备就会根据要求丢弃这个数据包。然后返回一个错误信息给发送者。这样往往会造成某些通讯上的问题,不过幸运的是大部分网络链路都是MTU1500或者大于1500。

 

如下图:


 


1.      SYN中的MSS

 

2.      SYN/ACK中的MSS


数据传输 



 

TCP连接终止

1.      全关闭:三次握手

 


 

2.      半关闭:4次握手

   一个方向: FIN=> ACK

   另一个方向:FIN=> ACK


TCP连接复位


差错控制

1.      检验和: 通过数据包的检验和确保数据没有被串改。

2.      确认:TCP采用确认来证实收到了数据包。

 

3.      重传:在一个数据包发送时,它会被保存到一个队列中,直至被确认为止。当重传计时器超时,或者发送方收到该队列中第一个数据包的三个重复的ACK时,该报文被重传。

 


 

4.      失序的报文:失序的报文到达时,不会被丢弃,而是被暂时保存下来,直到缺损的报文到达。但是TCP不会把失序的报文交付给应用程序。

 

拥塞控制

待整理

 

TCP中的计时器

重传计时器

启动计时器重传丢失的数据包。

持续计时器

持续计时器为了处理”零窗口值”后发送方不再发送数据包,如果发送方无法获得窗口开启的信息,则永远无法发送数据,这里启动一个计时器,定时的去探测对端的状态。


保活计时器

连接两端都没有数据传送处于空闲状态,设置一个计时器定时发送探测报文,确认对端处于活动状态。


时间等待计时器

Time-Wait计时器在TCP每个状态时设置一个计时器限制在每个状态上的时间。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值