TCP协议

来源:互联网 发布:dt大数据梦工厂 口碑 编辑:程序博客网 时间:2024/06/10 01:08

序列号(Sequence Number):0~2^32

确认号(ACK):这个字段的值是被成功接受的数据字节的序列号 + 1,只在ACK字段被启用下有效,这个ACK位字段通常位于除了初始和末尾之外的所有报文段

头部长度:以32位字为单位和IP数据包中的IHL一样,最大头部报长度为60字节,一般不带选项大小为20字节


8位标志位:

1.CWR:用塞窗口减

2.ECE:ECN回显

3.URG:紧急

4.ACK:确认

5.PSH:推送

6.RST:重置连接

7.SYN:用户初始化一个连接的同步序列号

8.FIN:该报文段的发送方结束向对方发送数据


窗口大小(16 bit):单位是字节数,16未所以最大为65535字节,接收方每次接受一个TCP包的大小,即一个接受TCP包的缓冲区大小

TCP校验和:和IP数据包的头部校验和一样都是16位的

紧急指针(Urgent Pointer):URG位字段被设置才有效,这个指针将被加到该报文段的序列号上的正偏移,以产生紧急数据的最后一个字节的序列号

选项:常见的选项是"最大段大小"选项,称为MSS,连接的每个端点一般在它发送的第一个报文(即带SYN标志的报文)上设置这个MSS选项.MSS指定

从对方接受到的最大报文段,即也是对象能够发送的最大报文段,MSS系统默认值为536字节(576-20-20),IP数据包至少能处理576(不包含TCP头部),MSS和窗口大小容易搞混淆,

MSS最大值一般是1460,因为MTU一般为1500,1500-ip头(20)-tcp头(20)=1460






TCP三次握手:

1)客户端发送一个带有SYN标志和一个初始序列号(ISN)的报文段,这个报文段被称为段1

2)服务器也发送自己的SYN报文段作为响应,并包含服务器的第一个初始序列号(ISN),该段称为段2,为了确认客户端发送的数据包是否成功,

服务器的ACK的值则为客户端发来的ISN + 1

3)为了确认服务器的SYN,客户端将服务器发送的数据段的ISN的数值+1,作为ACK报文段返回给服务器,这个报文段被称为段3

这个过程中客户端和服务器分别都发送了SYN的报文段


TCP关闭连接:

1)连接的主动关闭者发送一个FIN段指明 接收者 希望看到自己的当前序列号(K),FIN段还会包含ACK段用于

确认对象最近一次发来的数据(L)

2)连接的被动关闭者将K的数值+1作为响应的ACK值,用来确认自己接受到连接的主动关闭者发来的FIN段,此时上层的

应用程序会被告知连接的另一端已经提出了关闭的请求,这将导致应用程序发起自己的关闭操作,    接着被动关闭者将

变为主动关闭者,并发送自己的FIN,该报文的序列号为L

3)最后为了完成连接的关闭,发送一个ACK用户确认上一个FIN

关闭一个TCP连接需要4个报文段,建立一个TCP连接需要3个报文段,所以7个报文段是每个

TCP连接在正常建立与关闭时的基本开销








TCP半关闭:初始者发送FIN,接受是接收者回应FIN的ACK,此时发送这和接受者仍然可以

通信,期间发送者与接收者交互数据,最后接受者发送FIN,发送者回应ACK就over了






同时打开,同时关闭