网络基础 TCP协议(报文解析)
(一) TCP/ UDP区别
TCP:传输控制协议
TCP:传输控制协议
TCP与UDP都是属于传输层协议,尽管使用同样的网络层IP协议,但是两者之间有很大的区别。TCP是一种面向连接的协议,提供的是一种面向连接的、提供可靠地字节流服务。
TCP在正式收发数据前,必须要和对方建立可靠的连接(必须要经过三次“握手”才能建立起连接)。由于TCP是面向连接的协议,也就意味着TCP应用不能应用与多播和组播。
UDP则是面向非连接的协议,它不能与对方建立连接,而是直接把数据包发送过去,UDP适用于一次性传送少量的数据,对可靠性要求不高的应用环境。正因为UDP协议没有连接过程,所以通信速度快。所以在业务中,选择TCP还是UDP作为传输协议,完全取决于具体的业务需求。
(二) TCP可靠性的策略
1. 数据被分割为TCP认为合适的块进行传输
1. 数据被分割为TCP认为合适的块进行传输
2.当TCP发送一个数据报之后,将启动一个定时器,等待目标确认这个数据报,如果不能得到确认,将重发这个数据报。TCP提供了一系列的超时和重发策略。
3. TCP将保持伪首部、首部与数据的校验和(具体参考checksum算法),这是一个端到端的校验和。如果校验和出错,则接受端会丢弃这个数据,并不回送确认报文(发送端将在超时后重发)。
4. TCP采用IP协议作为网络层,IP数据报有可能乱序传送,如有必要,TCP将对IP数据报进行重新排序。
5. IP数据报可能会发送重复,TCP端能够丢弃重复的数据。
6. TCP 收到一个数据报时,并不立即发送确认报文,通常将推迟几十毫秒再发送。
7. TCP 提供了流量控制的策略
6. TCP 收到一个数据报时,并不立即发送确认报文,通常将推迟几十毫秒再发送。
7. TCP 提供了流量控制的策略
(三) TCP的报文格式详解
3.1 TCP报文格式
下图给出了TCP的报文格式(图片来源于网络)。有时一个IP地址和一个端口号也被称之为套接字(socket)。套接字对(socket pair)可以唯