3.6-TCP、IP协议
Create by fall on 2021-01-03 Recently revised in 2021-11-26
TCP 协议
如何保证页面文件能被完整送达浏览器?
- IP 头是 IP 数据包开头的信息,包含 IP 版本、源 IP 地址、目标 IP 地址、生存时间等信息;
- UDP 头中除了目的端口,还有源端口号等信息;
- IP 负责把数据包送达目的主机;
- UDP 负责把数据包送达具体应用;
- 对于错误的数据包,UDP 不提供重发机制,只是丢弃当前的包,不能保证数据的可靠性,但是传输速度非常块;
- TCP 头除了包含了目标端口和本机端口号外,还提供了用于排序的序列号,保证了数据完整地传输,它的连接可分为三个阶段:建立连接、传输数据和断开连接;
好吧,TCP 这个协议,比 C++ 还要复杂,所以提前需要知道一些知识,没问题吧?
我们需要知道TCP在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层,在第二层上的数据,我们叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment。
我们程序的数据首先会打到TCP的Segment中,然后TCP的Segment会打到IP的Packet中,然后再打到以太网Ethernet的Frame中,传到对端后,各个层解析自己的协议,然后把数据交给更高层的协议处理。
很多情况下,我们所说的 TCP/IP 协议不仅仅是这两个协议,而是利用 IP 地址进行通信所用到的协议的统称。
TCP的头格式
- TCP 的包,没有 IP 地址,TCP不负责该部分,但是,有源端口和目标端口。
- 一个 TCP 连接需要四个元组来表示是同一个连接(src_ip,src_port,dst_ip,dst_port),但是准确的来说,还需要一个协议。但协议不就是这个TCP吗。所以这里说是四个
- 投个始终有四个十分重要的东西
- Sequence Number 是包的序列号,用来解决网络包乱序(recordering)问题
- Acknowledgement Number 确认收到,用来解决不丢包的问题
- Window 又叫 Advertised-Window 也就是著名的滑动窗口(Sliding Window),用于解决流控的。
- TCP Flag,包的类型,用于操控TCP的状态机。

TCP的状态
其实,网络上的传输是没有连接的,包括TCP也是一样的。而TCP所谓的“连接”,其实只不过是在通讯的双方维护一个“连接状态”,让它看上去好像有连接一样。所以,TCP的状态变换是非常重要的。
参考文章
作者 | 链接 |
---|---|
陈皓 | https://coolshell.cn/articles/11564.html |