1、TCP协议
- 报文格式
- Source Port Number:源端口
之所以占据16个bit位,是因为2的16次方正好可以标识65535个端口号 - Destination Port Number:目标端口
- Sequence Number:请求时附带的随机序列号
- Acknowledgement Number:应答时附带的序列号
在对方请求时附带的序列号的基础上加1 - Header Length:报文首部的长度
4个bits表示首部最长的长度为2个4次方,也就是可以标识15段,一段为4个字节,则最长长度为60个字节 - Reserved:报文的标识位,占据6bit,可表示6个flag
- URG:紧急指针(urgent pointer)有效。
- ACK:确认序号有效。
- PSH:接收方应该尽快将这个报文交给应用层。
- RST:重置连接。
- SYN:发起一个新连接。
- FIN:释放一个连接。
不要将确认序号Ack与标志位中的ACK搞混了。确认方Ack=发起方Seq+1,两端配对。
-
Windows Size:滑动窗口的大小
用以告知对方自己接受缓冲区的大小,以协商出一个合适的传输速率 -
TCP Checksum:TCP的校验和,提供额外的可靠性
-
Urgent Pointer:标记进制数据在字段中的位置
-
Options:可选部分(这部分的最大长度为40Bytes)
-
Data:数据部分
-
三次握手和四次挥手
-
三次握手
第一次握手:序列号初始情况下是随机产生的。
服务器:响应
序列号初始情况下是随机产生的。
ACK=X+1:它有两个功能
一个功能是:告诉客户端,我已经收到你发给我的请求。
第二个功能:告诉客户端,希望下一次再给发的时候,你的序号要是X+1
(SEQ=X+1).
RWND:是服务器告诉客户端,我现在可以接收多少个字节。窗口–提高数据传输的效率设置。 -
四次挥手过程说明
①主机A发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并目还将报文中FIN字段置为1,表示需要断开TCP连接。
②主机B会回复A发送的TCP断开请求报文,其中包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值,是在A发过来的seq序列号基础上加1进行回复,以便A收到信息时,知晓自己的TCP断开请求已得到了验证。
③主机B在回复完A的TCP断开请求后,不会马上就进行TCP连接的断开,主机B会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕就会将回复报文的FIN字段置1,并产生随机seq序列号。
④主机A收到主机B的TCP断开请求后,会回复主机B的断开请求,包含随机生成的seq字段和ack字段,ack字段会在主机B的TCP断开请求的seq基础上加1,从而完成主机B请求的验证回复至此TCP断开的4次挥手过程完毕。