(1)源端口号,16位,发送方的端口号。
(2)目标端口号,16位,发送方的目标端口号。
(3)序列号:在建立连接时由计算机生成的随机数作为初始值,通过SYN包传给接收端主机,每发送一次数据,就累加一次该数据字节数的大小,用来解决网络包乱序问题。
(4)确认应答号:指下一次期望收到的数据的序列号,发送端收到这个确认应答号以后可以认为这个序号以前的数据已经被正常接收,用来解决不丢包的问题。
(5)首部长度,4位。没有任何选项字段的TCP首部长度为20字节;最多可以有60(15*4)字节的TCP首部。
(6)预留字段,都为0
(7)TCP标志位
(8)此字段用来进行流量控制,主要用于解决流控拥塞的问题。单位为字节数,这个值是本机期望一次接收的字节数。
(9)对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。
(10)它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
(11)32位Tcp选项:一般包含在三次握手中
IP层是不可靠的,它不保证网络包的交付、不保证网络包的按序交付、不保证网络包中的数据完整性。如果需要保证网络数据包的可靠性,那么就需要传输层的TCP协议来负责,TCP是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。
TCP是面向连接、可靠的、基于字节流的传输层通信协议。
用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小成为连接。
TCP四元组可以唯一的确定一个连接,包括:源地址、源端口、目的地址、目的端口。
源地址和目的地址的字段(32位)是在IP头部中,作用是通过IP协议发送报文给对方主机;源端口和目的端口的字段(16位)是在TCP头部中,作用是告诉TCP协议应该把报文发给哪个进程。
服务器通常是固定在某个本地端口上监听,等待客户端的连接请求。
最大TCP连接数=客户端的IP数 * 客户端的端口数
对于IPv4,客户端的IP数最多为232,客户端的端口数最多为216,也就是服务器端单机最大TCP连接数约为248. 当然,服务端最大并发TCP连接数远不能达到理论上限:
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。UDP的头部格式:
由于TCP是面向连接的,能够保证数据的可靠性交付,因此经常用于:FTP文件传输,HTTP/HTTPS;
由于UDP面向无连接,可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于:包总量较少的通信,如DNS、SNMP等,视频、音频等多媒体通信,广播通信。
原因是TCP有可变长的选项字段,而UDP头部长度是不会变化的,所以无需多一个字段去记录UDP的首部长度。
TCP中计算负载数据长度:
TCP数据的长度=IP总长度-IP首部长度-TCP首部长度
但是因为网络设备硬件设计和处理方便,首部长度需要时4字节的整数倍,所以为了补全UDP首部长度是4字节的整数倍才补充了包长度字段。
参考文献:https://mp.weixin.qq.com/s/ihDCVCI4jm24XDZ9bCTfqQ
原文:https://www.cnblogs.com/xiaona-/p/12796309.html