TCP/IP协议族体系结构


教程推荐:

人工智能教程,点击这里查看,通俗易懂,风趣幽默

C/C++教程,点击这里查看,以项目为主导从入门到精通

前言

TCP/IP协议族是一个四层协议系统

从下到上分别为数据链路层网络层传输层应用层
在这里插入图片描述
每一层都通过若干协议实现完成不同的功能,且上层协议使用到下层协议的服务

数据链路层

数据链路层实现了网卡接口的网络驱动程序,处理数据在物理媒介上的传输,并隐藏了各个物理媒介之间的区别,为上层协议提供了统一的接口。

数据链路层使用到的两个常用协议为ARP(Address Resolve Protocol,地址解析协议)协议和RARP(Reverse Address Resolve Protocol,逆地址解析协议)协议

这两个协议实现了ip地址和机器物理地址之间的转换(通常为MAC地址)

作用:

网络层是通过ip寻址的,而数据链路层只能通过物理地址寻址,因此网络层需要先将ip地址通过ARP协议转换为物理地址才能使用物理链路层提供的服务。而RARP仅用于某些无盘工作站,因缺少存储设施,无法存储ip地址,则可以使用RARP协议,通过物理地址向管理员查询自己的ip地址

网络层

通常网络上的两台主机之间不是直接相连接的,两种之间存在多个中间节点(路由器)。网络层的作用就是在众多的节点中选择中间节点,使两台主机能够通信,确定两台主机的通信路径。

同时,网络层向上层隐藏了网络拓扑结构的细节,使得在传输层和应用层看来,通信双方是直接连接到一起的。

网络层最核心的协议是ip协议(Internet Protocol,因特网协议)。IP协议根据数据包的目的地ip决定如何投递,如果数据包不能直接发送给目标主机,那么ip协议就为它寻找下一个合适的路由器进行跳转,并将数据包交给该路由器,多次重复直到数据包最终到达目标计算机,或者由于发送失败而被丢弃。

总结来说,ip协议就是通过逐跳(hop by hop)的方式确定通信路径

网络层另一个重要的协议是ICMP(Internet Control Message Protocol,因特网控制报文协议),它是ip协议的重要补充,主要用来检测网络连接

比如我们常用的ping命令确定两台主机之间是否能够通信,就是采用的该协议

报文格式如图:

在这里插入图片描述
8位类型用于区别报文类型,它将ICMP报文区别分为了两大类

一类是差错报文,主要用来回应网络错误,比如目标不可(3)到达和重定向(5)

另一类是查询报文,用来查询网络信息,比如ping命令中就使用的查看目标是否可达(8)

有的ICMP报文还使用8位代码段来进一步细分,比如重定向报文(5)中,使用代码值0表示网络重定向,代码之1表示对主机重定向

16位校验和字段用于对整个报文(包括头部和内容)进行循环冗余校验(Cyclic Redundancy Check,CRC),以及检验报文是否在传输过程中是否损坏。

需注意的是,ICMP协议并非严格意义上的网络层协议,因为它使用了同一层的IP协议提供的服务

传输层

传输层为两台主机上的应用提供端到端(end to end)的通信。

与网络层不同的是,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程

传输层主要协议有三个,TCP协议,UDP协议和SCTP协议

1.TCP协议(Transmission Control Protocol,传输控制协议)

目的是为应用层提供可靠的面向连接的、和基于流的服务。TCP协议使用了超时重传、数据确认等方式确保数据包被正确的发送至目的地,使得其可靠。

使用TCP协议通信的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据结构,比如连接状态、读写缓存区,以及定时器等。

通信结束,双方必须关闭连接来释放这些内核数据。

2.UDP协议(User Datagram Protocol,用户数据包协议)

该协议与TCP协议完全相反,它为应用层提供不可靠、无连接和基于数据包的服务

这意味着,UDP协议无法保证数据可以正确的传输到目的端,如果数据在中途丢失,或目的端通过数据校验发现数据错误而将其丢弃,UDP协议只会简单的通知应用程序发送失败。

同时由于处于无连接状态,所以每次发送数据都需要明确指定接收端的地址(IP 和端口等)

需要注意的是,每个UDP数据报都有一个长度,接收端必须以该长度为最小单位将所有内容一次性读出,否则数据将被截断。

3.SCTP协议(Stream Control Transmission Protocol,流控制传输协议)

这是一种比较新的传输层协议,为在因特网上传输电话信号而设计。

应用层

应用层负责处理应用程序的逻辑,比如文件传输、名称查询和网络管理等,所以工作在用户层。而数据链路层、网络层和传输层负责处理网络通信细节,这部分必须稳定而高效,因此它们都在内核空间中实现。

应用层协议有很多,比如:

  • telnet协议,一种远程登录协议,它使我们能在本地完成远程任务。
  • OSPF协议(Open Shortest Path First,开放最短路径优先),是一种动态路由协议更新协议,用于路由器之间的通信,以告诉对方各自的路由信息
  • DNS协议(Domain Name Service,域名服务),提供机器域名到IP地址的转换

注意ping是应用程序,而不是协议,它利用了ICMP报文检测网络连接,是调试网络环境的必备工具

通信流程

1.发送数据的过程

首先,上层协议如何利用到下层协议提供到的服务呢?答案就是封装
在这里插入图片描述
如图,当在应用层需要发送一段数据时,就需要将该数据通过协议栈从上往下依次传递,同时每一层协议都会在上一层数据的基础上加上自己的头部信息

比如我们常见的TCP/UDP协议,在接收到我们要发送的数据时,就会在我们要发送的数据前面加上自己的头部信息,这就是封装。

在这里插入图片描述
以TCP为例,如图,经过TCP协议封装后的数据称为TCP报文段(TCP message segment)或简称TCP段。

上面说到,TCP协议会在内核中存储相关数据,为通信双方维持一个连接,这部分数据中就有TCP头部信息和TCP内核缓存区(发送缓存区和接收缓存区),一同构成TCP报文段,如图虚线所示。

当你在应用程序中调用send(或write)函数发送数据时,内核中的TCP模块首先会把这些数据复制到与当前连接对应的TCP内核发送缓存区中,然后TCP模块调用下层的IP协议服务,将TCP报文段(TCP头部信息和TCP发送缓存区中的数据)作为参数传入。

IP层接收到了上层的数据(TCP报文段),再次进行封装,过程与TCP相同,经IP封装后的的数据叫做IP数据报(IP datagram),并再次将封装好的数据IP头部 TCP头部 要发送的数据)传入下一层:数据链路层

经有上面同样的过程,数据链路层再进行一次封装,加入对应的头部信息,封装后的数据称为帧(frame),需要注意的是,根据传输介质的不同,帧的类型也不相同,比如以太网上传输的称为以太网帧,令牌环网络传输的称为令牌环帧

以以太网帧为例,封装细节如图:
在这里插入图片描述
以太网帧使用6字节的目的物理地址和源物理地址来表示通信双方,2字节类型,和要传输的数据(IP头部,TCP头部,数据),以及最后的CRC(循环冗余校验)

可以看到,再以太网中,帧最多能携带的上层数据为1500个字节,这就意味着,过长的IP数据报需要被分片传输。帧是最终在物理网络上传送的字节序列。

至此就完成了一次完整的数据封装。

2.接收数据的过程

当帧达到目的主机时,将沿着协议栈自低而上依次传递,各层协议依次处理帧中本层负责的头部,获取到所需信息,并最终将处理后的数据交给应用程序。该过程称为分用。

在这里插入图片描述
由图可看到,当帧进入目的第的以太网驱动后,通过以太网帧的2字节类型数据区分帧类型交给哪个协议处理(ARP IP RARP),如果为0x800则为IP数据报,0x806则为ARP请求或应答报文,0x835则为RARP请求或应答报文。

同理,由于ICMP,TCP,UDP都使用IP协议提供的服务,所以IP数据报的头部采用16位的字段来区分他们。

TCP和UDP又通过数据报头部中16位端口号区分不同的应用程序,比如DNS协议对应端口53,HTTP协议对应端口80。

通过分装和分用的过程,顶层应用仿佛在直接通信,而感受不到底层繁琐的过程。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余识-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值