序列号(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了
同时打开,同时关闭