icmp基于tcp还是udp_TCP/IP协议族-结构和主要协议

TCP/IP协议族是一个四层协议系统,从下往上分别是:

  • 数据链路层
  • 网络层
  • 传输层
  • 应用层

每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。

8a734469b250f5ea420d9c1c5350c35c.png

TCP/IP协议族体系结构及主要协议

数据链路层

数据链路层实现了网卡接口的网络驱动程序,以及处理数据在物理媒介(比如以太网、令牌环等)上的传输。不同的物理网路具有不同的电气特性,网络驱动程序隐藏了这些细节,为上层协议提供一个统一的接口。数据链路层(驱动程序)封装了物理网络的电气细节。

数据链路层的两个常用协议是ARP协议(Address Resolve Protocol,地址解析协议)和RARP(Reverse Address Resolve Protocol,逆地址解析协议)。它们实现了IP地址和机器物理地址(通常是MAC地址,以太网、令牌环和802.11无线网络都使用MAX地址)之间的相互转换。

网络层使用IP地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,因此网络层必须先将目标机器的IP地址转化为其物理地址,才能使用数据链路层提供的服务,这就是APR协议的用途。

695e556e4a9337be8e031de6b52725f1.png

RARP协议仅用于网络上的某些无盘工作站。因此缺乏存储设备,无盘工作站无法记住自己的IP地址,但它们可以利用网卡上的物理地址来向网络管理者(服务器或网络管理软件)查询自身的IP地址。运行RARP服务的网络管理者通常存在该网络上所有机器的物理地址到IP地址的映射。

网络层

网络层实现数据包的选路和转发。WAN(Wide Area Network 广域网)通常使用众多分级的路由器来连接分散的主机或LAN(Local Area Network 局域网)因此,通信的两台主机一般不是直接相连的,而是通过多个中间节点(路由器)连接的。网络层的任务就是选择这些中间节点,以确定两台主机之间的通信路径。同时,网络层对上层协议隐藏了网络拓扑的细节,使得传输层和网络应用程序看来,通信的双方是直接相连的。网络层封装了网络连接的细节。

网络层最核心的协议是IP协议(Internet Protocol,因特网协议)。IP协议根据数据包的目的IP地址来决定如何投递它。如果数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳(next hop)路由器,并将数据包交付给该路由来转发。多次重复这一过程,数据包最终到达目标主机,或者由于发送失败而被丢弃。可见,IP协议使用逐跳(hop by hop)的方式确定通信路径。

网络层另外一个重要的协议是ICMP协议(Internet Control Message Protocol,因特网控制报文协议)。它是IP协议的重要补充,主要用于检测网络连接。ICMP协议使用的报文格式如下:

37e5411b5f29b8a928b46bfb9b29cf4c.png

ICMP报文格式

差错报文

主要用来回应网络错误

目标不可达,类型值3

重定向,类型值为5

代码值0表示对网络重定向

代码值1表示主机重定向

查询报文

主要用来查询网络信息

ping程序查看目标是否可达(类型值为8)

使用16位校验和CRC检验报文是否受损

头部

内容部分

需要指出的是,ICMP协议并非严格意义上的网络层协议,因为它使用处于同一层的IP协议提供的服务(一般来说,上层协议使用下层协议提供的服务)。

传输层

传输层为两台主机上的应用程序提供端到端(end to end)的通信。与网络层使用的逐跳通信方式不同,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。

b270e02bee8c99f2586c1f51afa0d872.png

上图中的垂直箭头表示TCP/IP协议族各层之间的实体通信(数据包确实是沿着这些线路传递的),而水平虚线箭头表示逻辑通信线路。

传输层应用层封装了一条端到端的逻辑通信链路,它负责数据的收发、链路的超时重连等。

传输层邪恶协议主要有3个:TCP协议、UDP协议和SCTP协议。

TCP协议(Transmission Control Protocol,传输控制协议)为应用层提供可靠的、面向连接的和基于流(stream)的服务。TCP协议使用超时重传数据确认等方式来确保数据包被正确地发送至目的端,因此TCP服务是可靠的。基于流的数据是没有边界(长度)限制的,它源源不断地从通信的一端流入另一端。发送端可以逐个字节地向数据流写入数据,接收端也可以逐个字节地将它们读出。

UDP协议(User Datagram Protocol,用户数据协议)则与TCP协议完全相反,它为应用层提供不可靠、无连接和基于数据报的服务。“不可靠”意味着UDP协议无法保证数据从发送端正确地传送到目的端。如果数据在中途丢失,或者目的端通过数据校验发现数据错误而将其丢弃,则UDP协议只是简单地通知应用程序发送失败。因此使用UDP协议的应用程序通常要自己处理数据确认、超时重传等逻辑。UDP协议是无连接的,及通信双方不保持一个长久的联系,因此应用程序每次发送数据都要明确指定接收端的地址(IP地址等信息)。基于数据报的服务,是相对基于流的服务而言的。每个UDP数据报都有一个长度,接收端必须以该长度为最小单位将其所有内容一次性读出,否则数据将截断。

SCTP协议(Stream Control Transmission Protocol,流控制传输协议)是一种相对较新的传输层协议,它是为了在因特网上传输电话信号而设计的。

应用层

应用层负责处理应用程序的逻辑。应用层在用户空间实现,负责处理众多的细节,比如文件传输、名称查询和网络管理等。如果把应用层放入内核中,会使内核非常庞大。也有少数服务器程序是在内核中实现的,这样代码就无需在用户空间和内核空间来回切换(主要是数据的复制),极大地提高了工作效率,但代码实现负责,不灵活,不易移植。

应用层协议(或程序)可能跳过传输层直接使用网络层提供的服务。我们可以通过/etc/services文件查看所有知名的应用层协议,端口以及他们都能使用哪些传输层服务。

4ae82620145da04996bf421ff93dfc8b.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值