image.png

IP

IP是跨网络传送数据包,使整个互联网都能收到数据的协议。使用IP地址作为主机的标识。(连接IP网络的所有设备必须有自己唯一的识别号以便识别具体的设备)

虽然IP也是分组交换的一种协议,但是不具有重发机制。即使分组数据包未能到达对端主机也不会重发。因此IP属于非可靠性传输协议

ARP
从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议。

2.5 TCP/IP分层模型与通信示例

image.png

发送、接收数据包

TCP/IP的通信过程:

应用程序处理

在应用程序进行编码处理。在发送的那一刻建立TCP连接,从而利用这个TCP连接发送数据。首先将应用的数据发送给下一层的TCP,然后再实际转发处理。

TCP模块的处理

TCP根据应用的指示,负责建立连接、发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送到对端的可靠传输

为了实现TCP这一功能,需要在应用层数据的前段附加一个TCP首部。TCP首部中包含源端口号和目标端口号、序号(用于确定发送的包中哪部分是数据)以及校验和(用于判断数据是否被损坏)。

随后将附加了TCP首部的包发送给IP。

IP模块的处理

IP将TCP传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前段加上自己的IP首部。IP首部中包含接收端IP地址以及发送端IP地址。紧随IP首部的还有用来判断其后面数据时TCP还是UDP的信息。

IP包生成后,参考路由控制表决定接收此IP包的路由或主机。随后IP包被发送给连接这些路由器或主机网络接口的驱动程序,实现真正发送数据。

如果尚不知道接收端MAC地址,可以利用ARP查找。只要知道了对端MAC地址,就可以将MAC地址和IP地址交给网络驱动程序,实现数据传输。

网络接口(以太网驱动)的处理

从IP传过来的IP包,对于以太网驱动来说只是数据。给该数据加上以太网首部并进行发送处理。以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。

接收开始:

网络接口(以太网驱动)的处理

主机收到以太网包之后,首先从以太网首部找到MAC地址判断是否为发给自己的包。如果不是发给自己的包则丢弃数据。如果是自己的包,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型。此例中就是IP包,因此将数据传给处理IP的子程序,如果不是IP而是其他如ARP的协议,就把数据传给对应的协议处理子程序。

IP模块的处理

IP模块收到IP包首部及后面的数据部分后,判断包首部中的IP地址是否与自己的IP地址匹配,即可接收数据并从中查找上一层的协议(传输层)。如果上一层是TCP,就将IP包首部后的部分传给TCP处理;如果是UDP则传给UDP处理。

对于有路由器的情况下,接收端地址往往不是自己的地址,此时需要借助路由控制表,在调查应送达的主机或路由器之后再转发数据。

TCP模块的处理

在TCP模块中,首先会计算校验和,判断数据是否被破坏。然后检查是否在按照需要接收数据。最后检查端口号,确定具体的应用程序。

数据接收完毕后,接收端发送一个确认回执(ACK)给发送端。如果这个ACK没有到达发送端,那么发送端会认为接收端没有接收到数据而一直反复发送。

数据被完整接收后,会传给由端口号识别的应用程序。

应用程序的处理

接收端应用程序会直接接收发送端发送的数据。