TCP头部
序列号: 在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传送给接收端主机,每发送一次数据,就累加一次该数据字节数的大小。用来解决网络包乱序问题。
确认应答号: 指下一次期望收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序列号以前的数据都已经被正常接收。用来解决不丢包的问题。
控制位:
- ACK: 该位为
1
时,确认应答的字段变为有效,TCP规定处理最初建立连接时的SYN
包之外该位必须设置为1
。 - RST:该位为
1
时,表示TCP连接中出现异常必须强制断开连接。 - SYN:该位为
1
时,表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。 - FIN:该位为
1
时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN
位为1
的TCP
段。
什么是TCP
TCP是面向连接的、可靠的、基于字节流的传输层通信协议。
面向连接: 一定是“一对一”才能连接,不能像UDP协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的。
可靠的: 无论网络链路中出现了怎样的链路变化,TCP都可以保证一个报文一定能够到达接收端。
字节流: 消息是“没有边界”的,所有无论我们的消息有多大都可以进行传输。并且消息是“有序的”,当“前一个”消息没有收到的时候,即使它先收到了后面的字节,那么也不能扔给应用层去处理,同时对“重复的”报文会自动丢弃。