一、TCP的头部格式

- 序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送⼀次数据,就累加⼀次该数据字节数的大小。用来解决网络包乱序问题。
- 确认应答号:指下⼀次期望收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题。
- 控制位
- ACK:该位为1时,表示确认应答号的字段为有效,TCP规定除了最初建立连接时的SYN包之外该位必须设置为1。
- RST:该位为1时,表示TCP连接中出现异常必须强制断开连接。
- SYN:该位为1时,表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。
- FIN:该位为1时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的 主机之间就可以相互交换FIN 位为1的TCP段。
- URG:该位为1时,表示的是此报文段中有紧急数据,将紧急数据排在普通数据的前面;当接受端收到此报文后后必须先处理紧急数据,而后再处理普通数据。
- PSH:该位为1时,当发送端将PSH置为1时,TCP会立即创建一个报文并发送。接受端收到PSH为1的报文后就立即将接受缓冲区内数据向上交付给应用程序,而不是等待缓冲区满后再交付。
- 窗口大小:表示准备收到的每个TCP数据的大小。
- 校验和:计算TCP头部,从而证明数据的有效性。
- 紧急指针:紧急数据点,当功能bit中的URG取值为1时有效。
- 选项:如果这里有设置其他参数,会导致头部增大。
二、TCP的特点
TCP是面向连接的、可靠的、基于字节流的传输层通信协议。
- 面向连接:⼀定是⼀对⼀才能连接,不能像 UDP 协议可以⼀个主机同时向多个主机发送消息,也就是⼀对多是无法做到的
- 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证⼀个报文一定能够到达接收端
- 字节流:消息是没有边界的,所以无论我们消息有多大都可以进行传输。并且消息是有序的,当前⼀个消息没有收到的时候,即使它先收到了后面的字节,那么也不能扔给应用层去处理,同时对重复的报文会自动丢弃。
三、TCP连接
用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接。
建立⼀个 TCP 连接是需要客户端与服务器端达成上述三个信息的共识
- Socket:由 IP 地址和端口号组成
- 序列号:用来解决乱序问题等
- 窗口大小:用来做流量控制
确定唯一的一个TCP连接
四元组
- 源地址
- 源端口
- 目标地址
- 目标端口
源地址和目标地址的字段(32位)是在IP头部中,作用是通过IP协议发送报文给对方主机。 源端口和目的端口的字段(16位)是在TCP头部中,作用是告诉TCP协议应该把报文发给哪个进程。
TCP的最大连接数
最大TCP连接数 = 客户端IP数 * 客户端端口数
一般为 2 ^ 32 * 2 ^ 16 = 2 ^ 48 ,但是服务端最大并发TCP连接数远不能达到理论上限,存在文件描述符和内存限制。
四、UDP和TCP的区别以及应用场景
UDP的头部格式

- 目标端口号和源端口号:主要是告诉 UDP 协议应该把报文发给哪个进程
- 包长度:该字段保存了 UDP 首部的长度跟数据的长度之和
- 校验和:校验和是为了提供可靠的UDP首部和数据而设计
UDP和TCP的区别
-
连接:
- TCP是面向连接的传输层协议,传输数据前先要建立连接。
- UDP是不需要连接,即刻传输数据。
-
服务对象:
- TCP是一对一的两点服务,即⼀条连接只有两个端点。
- UDP支持一对一、一对多、多对多的交互通信。
-
可靠性:
- TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
- UDP是尽最大努力交付,不保证可靠交付数据。
-
拥塞控制、流量控制:
- TCP有拥塞控制和流量控制,保证数据传输的安全性。
- UDP则没有,即使网络非常堵了,也不会影响UDP的发送速率。
-
首部开销:
- TCP首部长度较长,会有⼀定的开销,首部在没有使用选项字段时是20个字节,如果使用了选项字段则会变长的。
- UDP首部只有8个字节,并且是固定不变的,开销较小。
-
传输方式:
- TCP是流式传输,没有边界,但保证顺序和可靠。
- UDP是⼀个包⼀个包的发送,是有边界的,但可能会丢包和乱序。
-
分片不同:
- TCP的数据大小如果大于 MSS大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装TCP数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
- UDP的数据大小如果大于MTU大小,则会在IP层进行分片,目标主机收到后,在IP层组装完数据,接着再传给传输层,但是如果中途丢了⼀个分片,在实现可靠传输的UDP时则就需要重传所有的数据包,这样 传输效率非常差,所以通常UDP的报文应该小于MTU。
-
包长度:
- TCP:TCP没有包长度,是因为TCP的包长度是可以算出来的
TCP数据长度 = IP总长度 - IP首部长度 - TCP首部长度 - UDP:UDP有包长度,因为为了网络设备硬件设计和处理方便,首部长度需要是 4节的整数倍。 如果去掉 UDP包长度字段,那 UDP 首部⻓度就不是4字节的整数倍了。
- TCP:TCP没有包长度,是因为TCP的包长度是可以算出来的
UDP和TCP的应用场景
TCP:FTP文件传输,HTTP/HTTPS
UDP:包总量小的通信,如DNS、SNMP等;视频、音频等多媒体通信;广播通信。
本文详细介绍了TCP协议的头部格式,包括序列号、确认应答号、控制位等,以及TCP的特点,如面向连接、可靠性和字节流。还阐述了TCP连接的唯一性由四元组确定,并讨论了TCP的最大连接数。此外,对比了TCP与UDP的区别,如TCP的连接、可靠性、拥塞控制和UDP的即时传输、无连接特性。最后,列举了两者在FTP、HTTP、DNS等不同应用场景中的选择。
216

被折叠的 条评论
为什么被折叠?



