跳到主要内容

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的头格式

https://coolshell.cn/wp-content/uploads/2014/05/TCP-Header-01.jpg

  • 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的状态机。
https://coolshell.cn/wp-content/uploads/2014/05/TCP-Header-02.jpg

TCP的状态

其实,网络上的传输是没有连接的,包括TCP也是一样的。而TCP所谓的“连接”,其实只不过是在通讯的双方维护一个“连接状态”,让它看上去好像有连接一样。所以,TCP的状态变换是非常重要的。

参考文章

作者链接
陈皓https://coolshell.cn/articles/11564.html