老青菜

TCP/IP模型

2019-06-01

TCP/IP(Transmission Control Protocol/Internet Protocol)参考模型一共包含五层。分别是:

应用层、传输层、网络层、数据链路层、物理层。

实际应用中,不太关心最下两层,把数据链路层物理层合并成网络接口层,划分成四层,分别是:应用层、传输层、网络层、网络接口层,如下图:

参考模型

分层模型图如上,每一层有自己的职责,接下来我们分别看看每一层的功能。

应用层

Application Layer,提供了应用程序通过网络传输交换数据的接口协议,常用的协议有:

  1. HTTP (rfc1945 rfc2616 rfc7540)、DNS
  2. FTP、SMTP(简单邮件传输协议)
  3. telnet、ssh(安全的远程登录)等等

传输层

Transport Layer,提供了不同主机的上的进程通信接口协议,把应用层的数据传输到对应 的进程。常用的协议有:

  1. TCPTransmission Control Protocol):面向连接,三次握手建立可靠连接;segment有 ack、重传机制,头部需要20B;应用层不需要关心丢包、乱序等问题。

  2. UDP(User Datagram Protocol):无连接,没有segment ack、重传机制。应用层自己控制发送,segment头部更小(8B)。

网络层

Network layer,提供不同主机的通信接口协议,负责把数据转发到下一个合适的路由节点。(两端之间可能会经过多个子网),常用的协议有:

IP(Internal Protocol) :网际协议
ICMP(Internet Control Message Protocol):控制报文协议,传输出错控制信息
ARP(Address Resolution Protocol):地址解析协议,广播arp请求到局域网,找到ip的MAC地址

数据链路层

Data Link Layer,介于物理层和网络层中间,在物理层的基础上,负责可靠把帧数据的传到下个节点的网络层

物理层

Physical Layer,提供物理传输介质,传送和接收比特流,比如光纤、电缆等等。

数据链路

数据链路

当我们请求一个链接的时候,每一层到底做了什么?我整理了一张数据链路图,如下:

每一层的职责都不一样,数据格式也不一样。

  1. 对于发送端,从上到下,数据一层层的封包。

     应用层消息 -> 传输层segment -> 网络层ip包 -> 数据链路层帧 -> 物理层比特流
    
  1. 对于接收端,从下到上,数据一层层的拆包。

     物理层比特流 -> 数据链路层帧 -> 网络层ip包 -> 传输层segment -> 应用层消息 
    

数据格式

接下来我们看几种重要的数据格式。

  1. 传输层,以TCP Segment为例

  1. 网络层,以IP Package为例

  1. 数据链路层,Frame

1. 从上到下

  1. 传输层 TCP 把应用层的消息封装到Segment.Payload里,把SegmentIP地址交给网络层;

  2. 网络层把 TCP Segment封装到IP.Data里,并且把IP的Package交给数据链路层;

  3. 链路层解析IP.IP,拿到MAC封到Frame.MAC,把IP的Package封到Frame.DataFrame交给物理层;

  4. 物理层把Frame转成比特流,通过介质传输到下一个节点;

2. 从下到上

  1. 物理层的比特流经过组装,得到Frame,交给数据链路层;

  2. 数据链路层解析Frame.DataIP Package,交给网络层;

  3. 网络层解析IP.ip地址,校验,取出IP.Data,转成Segment,交给传输层;

  4. 传输层解析Segment.Payload,交给应用层。

示例

最后,我们来看一段抓包示例。

curl --http1.0 www.laoqingcai.com

上图是wireshark抓包示意图,图中以 TCP 第一次握手的SYN包为例:

  1. 整个Frame.Header占14B,剩下的就是IP Package

  2. IP.Header占20B,剩下的就是TCP Segment

  3. TCP Segment Header占20B+可选区域,剩下的就是Payload,也就是应用层的消息数据;

最后,我们看一张从下到上的数据拆包实例图:

Tags: TCP
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章