TCP/IP协议(5): IP(Internet Protocol) 协议 —— 连接各个网络的协议
TCP/IP协议(5): IP(Internet Protocol) 协议 —— 连接各个网络的协议
关于 IP(Internet Protocol) 协议
IP(Internet Protocol) 协议是 TCP/IP 协议族 中的核心协议。 IP 协议根据数据 包(Packet) 中的 IP 地址, 为上层协议提供一种 无连接(Connectionless), 尽力而为(Best-effort Delivery) 的数据传输功能。
- 尽力而为的交付(Best-effort Delivery) 用于描述既不保证数据成功交付, 也不保证数据交付满足某种服务质量的网络服务。在尽力交付的网络中,所有的用户获得的都是尽力交互的服务,这就意味着他们传输数据的比特率、延迟和包丢失受当前网络的流量负载情况的影响而变化。
(Best-effort delivery describes a network service in which the network does not provide any guarantee that data is delivered or that delivery meets any quality of service. In a best-effort network, all users obtain best-effort service, meaning that they obtain unspecified variable bit rate and latency and packet loss, depending on the current traffic load. )- 无连接通信(Connectionless Communication) 是一种数据包交换网络的数据传输方法。在该网络中, 每个数据单元是根据其携带的信息独立寻址和路由,而不是像面向连接通信那样预先设置固定的数据通道。
(Connectionless communication is a data transmission method used in packet switching networks in which each data unit is individually addressed and routed based on information carried in each unit, rather than in the setup information of a prearranged, fixed data channel as in connection-oriented communication.)
IP 协议的主要内容
IP 协议的主要内容如下图,该例子将会在本部分的最后一小节详细介绍。
在电信技术中, 协议数据单元(Protocol Data Unit, PDU) 表示在计算机网络的对等实体间作为单个单元传输的信息。
与 OSI 模型中的前四层相关的协议数据单元如下:
- 物理层(第一层) 的 PDU 是位(bit)。
- 数据链路层(第二层) 的 PDU 是帧(frame)。
- 网络层(第三层) 的 PDU 是 包(packet)。
- 传输层(第四层)的 TCP 协议 的 PDU 是段(segment), UDP 协议 的 PDU 是数据报(datagram)
(In telecommunications, a protocol data unit (PDU) is information that is transmitted as a single unit among peer entities of a computer network.
Protocol data units are relevant in relation to each of the first four layers of the OSI model as follows:
- The physical layer (layer 1) PDU is the bit.
- The data link layer (layer 2) PDU is the frame.
- The network layer (layer 3) PDU is the packet.
- The transport layer(layer 4) PDU is the segment for TCP or the datagram for UDP.)
分片(Fragment)
网络层接收到上层协议的协议数据单元(Protocol Data Unit, PDU) 后,会在前面加上 IP 协议首部,封装成 IP 数据包。
由于数据链路层有效载荷的最大传输单元(Maximum Transmission Unit, MTU) 限制,如果上层协议的 PDU 加上 IP 首部长度大于 MTU,网络层会将上层协议的 PDU 拆分给多个 IP 数据包,这个操作被称之为分片(Fragment)。
IP 协议 本身是不保证数据顺序传输,因此需要分片后的 IP 首部 能提供 IP 数据包 的相关字段来复原上层协议 PDU。这些字段包括:
- 标识(Identification): 用于标识哪些分片属于同一个上层 PDU 的标识(Identification)。
- 标记(Flag):用于判断当前分片后面是否还有分片以及是否不能分片的
- 片偏移(Fragment Offset):用于记录当前分片在原上层 PDU 中的相对位置。
最大传输单元(MTU) 是用八位字节指定的可以用在基于包或帧传输的网络,如因特网,传输的最大包或帧的大小。在 Windows 95 中, 默认的 MTU 设为 1500 字节,部分是因为这是以太网的标准 MTU。因特网实际上的 MTU 是 576 字节, 但是 ISP 通常建议使用 1500 字节。
(A maximum transmission unit (MTU) is the largest size packet or frame, specified in octets (eight-bit bytes), that can be sent in a packet-based or frame-based network such as the Internet. In Windows 95, the default MTU was 1500 octets (eight-bit bytes), partly because this is the Ethernet standard MTU. The Internet de facto standard MTU is 576, but ISPs often suggest using 1500. )
IP 包转发(Forwarding)
当主机将数据通过 TCP/IP 协议栈将数据封装成帧后,通过局域网协议(如:以太网协议(IEEE 802.3) 或 Wi-Fi 协议(IEEE 802.11)) 将数据传输到当前局域网的网关(Gateway)。
网关接收到数据后,拆开数据帧,查看 IP 数据包 首部的目的 IP 地址。然后根据目的 IP 地址以及路由协议转发该数据帧。
在 IP 网络中,客户端自动将目标地址在给定子网掩码指定的网络之外的 IP 数据包发送给网关。如,一个网络号为 192.168.0.0, 子网掩码为 255.255.255.0 的私有网络中,目的地址不是 192.168.0.X 的数据将会被发送给该网络的网关。在转发 IP 数据包到其他网络时,网关可能会执行网络地址转换(Network Address Translation, NAT) 操作。
(On an Internet Protocol (IP) network, clients automatically send IP packets with a destination outside a given subnet mask as defined by a combination of network address and subnet mask to a network gateway. For example, if a private network has a base IP address of 192.168.0.0 and has a subnet mask of 255.255.255.0, then any data going to an IP address outside of 192.168.0.X will be sent to that network’s gateway. While forwarding an IP packet to another network, the gateway might or might not perform Network Address Translation.)
生存时间(Time To Live, TTL)
IP 数据包在网络间转发过程中,很可能会“迷路”或进入循环网络,造成网络堵塞。在 IP 首部的TTL字段通过控制 IP 数据包 存活的 跳数,以避免“迷路”的 IP 数据包长期占据网络带宽。
首部校验和(Header Checksum)
当数据帧到达目标主机/路由器后,会拆掉它的MAC 首部和尾部,恢复成 IP 数据包。然后根据 IP 首部的首部校验和简单地校验数据传输是否正确。如果正确,则路由器会继续将其封装成帧,传输给下一跳。
重组(Reassembly)
分片封装成的 IP 数据包 到达完全,校验成功后,通过 IP 首部的 标识(Identification),标记(Flag) 和 片偏移(Fragment Offset) 字段将分片的上层 PDU 重组。
例子详解
- 分片:主机 A 将上层 PDU 分片打包成 IP 数据包,然后封装成帧,发送到局域网中。
- 转发:数据帧在主机 A 所在的局域网 L1中找不到地址为 IP(B) 的主机,于是将该数据帧发给网关路由器 R1,路由器 R1 拆开该数据帧,查看IP 数据包 首部的目的 IP 地址 ,然后根据IP 地址将该数据帧转发到相应的网络 Net1。
- TTL:路由器转发数据帧时,会打开其负载的数据包,查看 TTL 值。当 TTL 值为 0 时,路由器会丢弃该数据包。否则路由器会将 TTL的值减一,然后封装成帧,传输给下一跳。
- 首部校验和:数据帧 从 Net1 路由到 路由器 R1,发送到 局域网 L2中。根据局域网协议,该数据帧最终被主机 B 接收。在传输过程中遇到的 路由器/主机 将拆掉数据帧的 MAC 首部 和 尾部,得到其负载的 IP 数据包。然后根据 IP 首部的首部校验和简单地校验数据传输是否正确。如果不正确,则直接丢弃该 IP 数据包,不做差错处理(上层协议会做处理)。
- 重组:分片封装成的 IP 数据包到达完全,校验成功后,通过 IP 首部的标识(Identification),标记(Flag) 和 片偏移(Fragment Offset) 字段将分片的上层 PDU 重组。
IP 协议包(Packet)
- 版本(Version):4位。IPv4 是 4, IPv6 是 6。
- Internet 首部长度(Internet Header Length, IHL):4位。IPv4 的首部长度(单位: 32位字)。
- 服务类型(Type of Service, ToS):8位。现在分为用于支持不同服务的 区分服务(Differentiated Services, DiffServ) 字段(前 6 位) 和用于拥塞控制的显示拥塞控制(Explicit Congestion Notification , ECN) 字段(后 2 位)。
- 总长度(Total Length):16位。IP 数据包的首部和数据的总长度(单位:字节)。
- 标识(Identification): 16位。对数据包进行编号,同一个的上层 PDU 分片得到的各个 IP 数据包 编号相同。标识字段用于分片后的重组。
- 标志(Flag):3位。最低位记为 MF(More Fragment), 当 MF = 1 时,表示后面还有与当前数据包分片自同一上层 PDU 的数据包。中间为记为 DF(Don’t Fragment), 当 DF = 0 时,才允许分片。最高位保留,必须置为 0。
- 片偏移(Fragment Offset):13位。上层 PDU 分片后的 IP 数据包 在原 PDU 中的相对偏移位置。偏移单位是 8 字节。也就是说,每个分片的长度一定是 8 字节(64 位) 的整数倍。
- 生存时间(Time To Live, TTL):8位。该 数据包 最多经过的路由器个数。每经过一个路由器,该值减一。当 TTL 为 0 时,路由器丢弃该 数据包。
- 协议(Protocol): 8位。指出当前数据包携带的数据是使用哪种协议。如,ICMP 是 1, IGMP 是 2, TCP 是 6, UDP 是 17。
- 首部校验和(Header Checksum):16位。简单校验数据包首部是否出差错。如果出错,则直接丢弃。每经过一个路由器都会计算一下首部校验和,因为首部的 TTL 等字段可能会发生改变。
- 源地址(Source address): 32 位。
- 目标地址(Destination address): 32位。
- 选项(Options):不常用。
参考文献
- Internet Protocol- Wikipedia
- Best-effort delivery - Wikipedia
- Connectionless communication - Wikipedia
- Protocol data unit - Wikipedia
- Maximum transmission unit - Wikipedia
- maximum transmission unit (MTU)
- Gateway (telecommunications) - Wikipedia
- W.Richard Stevens等著,《TCP/IP 详解(卷一: 协议)》
- 谢希仁编著, 《计算机网络》
TCP/IP协议(5): IP(Internet Protocol) 协议 —— 连接各个网络的协议的更多相关文章
- IP协议号 IP首部中有8位协议号,用于指明IP的上层协议.
IP协议号 IP首部中有8位协议号,用于指明IP的上层协议. 0 HOPOPT IPv6 逐跳选项 1 ICMP Internet 控制消息 2 IGMP Internet 组管理 3 GGP 网 ...
- TCP/IP协议和IP
理解 使用网络能够把多方链接在一起,然后可以进行数据传递 所谓的网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信 tcp/ip简介 1. 什么是协议 有的说英语,有的说中文,有的 ...
- IEEE1588精密网络同步协议(PTP)
1 引言 以太网技术由于其开放性好.价格低廉和使用方便等特点,已经广泛应用于电信级别的网络中,以太网的数据传输速度也从早期的10M提高到100M,GE,10GE.40GE,100GE正式产品也于20 ...
- 脚本设置IP bat 命令行设置自动获取IP和固定IP
由于办公室网络需要固定IP和DNS才能上网, 在连接公共网络或者家里又需要自动获取IP和DNS才能上网. 频繁手动切换很麻烦,就搞了两个脚本一键设置. 1.新建文本文件, 命名为固定IP.bat 复制 ...
- TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议
原文地址:http://hi.baidu.com/albyuyrgqgbbhoq/item/65006d2d002ab33195f62ba1 TCP/IP(Transmission Control P ...
- 一些重要的计算机网络协议(IP、TCP、UDP、HTTP)
一.计算机网络的发展历程 1.计算机网络发展 与其说计算机改变了世界,倒不如说是计算机网络改变了世界.彼时彼刻,你我都因网络而有了交集,岂非一种缘分? 计算机与网络发展大致经历如下过程:
- 结合Wireshark捕获分组深入理解TCP/IP协议之IP协议
摘要: 本文简单介绍了网络层理论知识,详细讲解了IP数据报各个字段,并从Wireshark俘获分组中选取IP数据报进行分析,也阐述了分组和分片的区别. 一.IPv4数据报 网络层是 ...
- 网络协议: TCP/IP 和UDP/IP
网络协议: TCP/IP 和UDP/IP TCP/IP TCP/IP(Transmission Control Protocol/Internet Protocol)是一种可靠的网络数据传输控制协议. ...
- TCP/IP笔记(四)IP协议
前言 IP相当于OSI参考模型的第3层--网络层:主要作用是"实现终端节点之间的通信"又称"点对点通信". IP作为整个TCP/IP中至关重要的协议,主要负责将 ...
- TCP/IP笔记(五)IP协议相关技术
IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP时无法实现通信的.必须还要又能够解析主机名称和MACdivide功能,以技术包在发送过程中异常情况处理的功能. 这篇主要介绍下DNS.ARP ...
随机推荐
- warning: ‘setAxisX‘ is deprecated
解决 将 chart->setAxisX(valueAxisX,lineSeries); 改为: chart->addSeries(lineSeries); chart->creat ...
- Springboot整合thymeleaf报错whitelabel page
1.SpringBootApplication未放在最外层 2.application.properties未配置spring.thymeleaf.check-template-location=tr ...
- 第二十五节:scrapy爬虫识别验证码(四)手绘验证码识别
一.介绍 今天主要介绍的是微博客户端在登录时出现的四宫格手绘验证码,不多说直接看看验证码长成什么样. 二.思路 1.由于微博上的手绘验证码只有四个宫格,且每个宫格之间都有有向线段连接,所 ...
- MapStruct与lombok加载顺序问题与annotationProcessorPaths的关系?
MapStruct是什么? MapStruct is a code generator that greatly simplifies the implementation of mappings b ...
- 【大数据工具选型】ETL&同步&调度工具比较-Kettle、Streamset,DataX、Sqoop、Canel,DolphinSchedule、Azkaban、Oozie、Airflow、Xxl Job
〇.概述 1.常用资料 dolphinscheduler用户手册:https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/syst ...
- SQL语句使用
目录 一:sql语句 1.什么是SQL语句? 二:基本SQL语句之库操作 三:基本SQL语句之表操作 1.查看当前所在库名称 2.切换数据库 四:基本SQL语句之记录操作 五:创建表的完整语法 六:操 ...
- uniapp中封装一个弹框组件
第一步:在components下创建 popup.vue子组件: popup.vue中 <template> <view> <view class="popus ...
- SQLSERVER 居然也能调 C# 代码 ?
一:背景 1. 讲故事 前些天看到一个奇怪的 Function 函数,调用的是 C# 链接库中的一个 UserLogin 方法,参考代码如下: CREATE FUNCTION dbo.clr_User ...
- 如何在mac电脑上配置命令行工具
Hi,欢迎大家在有空的时候做客[江涛学编程],这里是2023年的第7篇原创文章,今天我们来聊一聊如何在mac电脑上配置命令行工具 老规矩,拍拍手,上菜. 同学,打开你的mac电脑,按住键盘上的&quo ...
- [WPF]限制程序单例运行
代码 System.Threading.Mutex mutex; protected override void OnStartup(StartupEventArgs e) { bool ret; m ...