在应用层上设备A想给IP地址为P的设备B发送信息:(假定已知B的IP)
数据信息从应用层而来,在传输层指定特定的端口号,再将这些数据放到TCP报文或者UDP报文内。
若使用UDP,不论从应用层来的数据信息有多大,UDP照单全收,UDP是一次性发送一个完整的报文,同样在接收时也是直接接收整个报文;
若使用TCP,不论从应用层来的数据块有多大,或者有多小,TCP总是把这些数据存着,根据通信对方给出的窗口值和当前网络的拥塞程度判断将合适的数据放到一个TCP报文段中,这些数据段都是有标记的,用于重组时可以顺序地拼接起来;
在网络层,运输层的报文作为IP数据报的数据部分,并根据链路层所规定的最大传输单元(MTU)判断是否对运输层的数据进行截断处理。同时,将源端、目的端的IP地址填写到IP报文头部。并在这里执行ARP协议,是否目的地址就处于本网段内。如果目的端就在本网段内,直接根据获得的目的端的MAC地址,通过链路层将数据帧转发给目的端。如果目的端不在本网段内,则将该IP数据报发送给本网段的网关节点(路由器),网关节点(路由器)根据路由表信息,将IP数据包向其他网关节点(路由器)转发(这个过程同样需要执行一次ARP协议),最后IP数据包到达目的端所在的网段,再执行一次ARP协议,得到目的端的MAC地址,完成数据帧的转发。
在数据链路层,IP数据报作为MAC帧的数据部分,根据ARP协议所得到的目的端的MAC地址,构成完整的MAC帧,并通过数据链路层将MAC帧发送给本网段的某一个设备(可能是目的端也可以能是中间路由器)。
物理层传输比特流;
在数据链路层,本网段的设备监听到MAC帧,并将MAC帧的目的地址与自身的MAC地址相匹配,若匹配成功则接收该MAC帧,并将数据部分提取出来;
在网络层,解析IP数据报,将TCP或者UDP的报文提取出来;
在传输层,将TCP报文中的数据提取出来(并校验数据等),拼装成完整的数据交给应用层。对于UDP报文,将其中的数据直接交付给应用层;
设备B在应用层或得到数据。
原文地址:https://www.cnblogs.com/TheAfter/p/10410948.html