IP协议详解

IP协议属于网络层协议,所有的TCP, UDP, ICMP, IGMP数据都通过IP数据报传输。IP提供了一种不可靠,无连接的数据包交付服务。依赖其他层的协议进行差错控制。

  • 不可靠: IP数据报不保证能成功的到达目的地,如果出现错误则选择丢弃该数据,然后发送ICMP消息报给信源端

  • 无连接: IP不提供任何后续数据报的状态信息,每个数据报处理都是独立的。如果一个信源发送了连续的两个数据报,每个数据报选择独立的路由,两个数据可能不同时到达。IP通信双方都不长久地维持对方的任何信息。这样上层协议每次发送数据的时候,都必须明确指定对方的IP地址。

TCP 是通过 IP 数据报传输

TCP 是传输层协议,IP 是网络层(或称网际层)协议。虽然它们处于不同层,但 TCP 的数据是封装在 IP 数据报中进行传输的,这就是为什么说“TCP 是通过 IP 数据报传输”的原因。

协议封装关系

  • IP数据报如同一个标准化的“信封“,其首部中的“协议类型“字段(8位)用于标识载荷数据的类型:
    • 6 = TCP
    • 17 = UDP
    • 1 = ICMP
    • 2 = IGMP
  • 例如:当该字段值为6时,接收方网络层就知道要把数据交给传输层的TCP协议处理

TCP/IP 分层模型回顾

TCP/IP 模型通常分为四层:

层级 协议示例 功能
应用层 HTTP, FTP, DNS 提供应用程序接口和通信服务
传输层 TCP, UDP 负责端到端的数据传输
网络层(网际层) IP, ICMP 负责主机到主机的数据路由
网络接口层(链路层) Ethernet 负责物理介质上的数据传输

TCP 是如何通过 IP 数据报传输的?

TCP 负责将应用层的数据分成段(segments),并加上 TCP 头部信息(如源端口、目标端口、序列号等)。 这些 TCP 段会被交给下一层 —— IP 层。 IP 层将 TCP 段作为数据部分,加上自己的头部(如源 IP、目标 IP)形成一个 IP 数据报(datagram)。 然后这个 IP 数据报再被传给链路层(如以太网),加上帧头和帧尾,最终通过物理网络发送出去。

举个例子来类比

想象你要寄一封信:

  • 你写的内容是 应用层数据(比如一封情书)
  • 你把它放进信封,写上收件人和寄件人的地址,这是 TCP 层的段
  • 然后邮局又加了一个外包装,上面写了城市地址,这是 IP 层的数据报
  • 最后快递员装车运走,这相当于 链路层的传输

每一层都只关心自己那一层的事情,但数据是逐层封装、一起传送的。

所以,“TCP 是通过 IP 数据报传输”这句话的意思是

  • TCP 的数据(段)是作为 IP 数据报的“载荷”(payload)存在的。
  • IP 负责把 TCP 段从一台主机传送到另一台主机。
  • TCP 则负责在这两台主机之间提供可靠的、有序的、基于端口的通信。

总结

IP协议

不可靠性: IP协议负责将数据报从源地址发送到目的地址。它并不保证数据报能够成功到达目的地,也不保证数据报按顺序到达。如果一个数据报在网络中丢失或损坏,IP不会自动重新发送这个数据报。

**无连接:在发送数据报之前,IP不需要先建立连接。每个数据报都是独立处理的,即使两个数据报是属于同一个通信会话,它们也可能通过网络的不同路径到达目的地。

TCP协议

可靠性: 尽管IP协议本身是不可靠的,但TCP协议通过一系列机制确保了数据传输的可靠性。这些机制包括序列号、确认应答、超时重传等。例如,当发送方发送数据段后,它会等待接收方的确认消息(ACK)。如果没有在规定时间内收到确认消息,发送方会认为该数据段丢失,并重新发送。

面向连接: 在进行数据传输之前,TCP需要通过三次握手来建立一个连接。这确保了双方都准备好进行数据传输。同样,在结束通信时,TCP还需要通过四次挥手来断开连接,以确保所有数据都被正确接收并处理。

结合使用

虽然IP提供了基本的数据报传输服务,但是它的不可靠性和无连接特性使得它不适合直接用于大多数应用。这就是为什么我们通常使用TCP这样的传输层协议。TCP利用IP提供的服务,同时添加了自己的控制机制,以提供可靠的、有序的数据传输服务。因此,即便底层的IP协议不可靠,TCP仍然能够提供可靠的数据传输服务。这样,不同的应用程序可以根据自己的需求选择合适的传输层协议(如TCP或UDP)。

参考文章

网络层协议:IP协议详解