C++ TinyWebServer项目总结(2. IP协议)

TCP / IP 模型

主要分为以下四层:应用层、传输层、网络层、网络接口层。

IP 协议 (IPv4)

IPv4 的首部长度通常为 20B,除非含有可变长选项的部分。

IP 协议为上层协议提供无状态、无连接、不可靠的服务。

  • 无状态(stateless)指 IP 通信双方不同步传输状态信息。这种服务的最大缺点是无法处理乱序和重复的 IP 数据报。优势是简单、高效。
  • 无连接(connectionless)是指 IP 通信双方都不长久的维持对方的任何信息。上层协议每次发送数据的时候,都必须明确指定对方的 IP 地址。
  • 不可靠是指 IP 协议不能保证 IP 数据报准确地到达接收端,只承诺尽最大努力交付,但会返回一个 ICMP 差错报文(超时、终点不可达、源点抑制、参数问题等等)

头部结构 主要字段

  • 标识(identification)
    占 16 位,用来产生 IP 数据报的标识。它是一个计数器,每产生一个数据报就加1,并赋值给标识字段。但这个 “标识” 并不等同于序号,因为IP是无连接服务,数据报不存在按序接收的问题。
    以太网帧的最大传送单元(Maximum Transmission Unit, MTU)为 1500B,当一个 IP 数据报封装成帧时,总长度不能超过数据链路层的 MTU 值。
    当一个数据报长度超过MTU时,必须分片,这个标识字段的值就会被复制到所有的数据报片的标识字段中,相同的标识字段的值使得分片后的各数据报片最后都能正确地重装成为原来的数据报。
  • 标志(flag)
    占3位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)MF=1 表示后面还有分片,MF=0 表示最后一个分片。标志字段中间的一位是 DF (Don't Fragment) 。只有当 DF=0 时才允许分片。
  • 片偏移
    占13位,它指出了较长的分组在分片后,某片在原分组中的相对位置。片偏移以8个字节为偏移单位,即每个分片的长度一定是8B(64位)的整数倍。
  • 生存时间(Time To Live, TTL)
    占8位,表明这是数据报在网络中的寿命,即数据报在网络中可通过的路由器数的最大值。路由器在每次转发数据报前,就把TTL值减1。若TTL值减为零时,就丢弃这个数据报。
  • 协议
    占8位,指出此数据报携带的数据使用何种协议,及分组的数据部分应交给哪个传输层协议,如TCP、UDP等。其中值为6表示TCP,为17表示UDP。

IP地址就是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围是唯一的32位的标识符。无论哪类IP地址,都由网络号和主机号两部分组成。一般将IP地址分为A、B、C、D、E 五类地址:

IPv6 将地址从 32 位(4B)扩大到了 128 位(16B)

IP 路由

IP 协议的一个核心任务是数据报的路由,即决定发送数据报到目标机器的路径。IP 模块实现数据报路由的核心数据结构是路由表。

在终端输入 route,输出如下内容:

路由转发过程按以下顺序依次执行:

  1. 从数据报首部提取目的主机的IP地址D,得出目的网络地址N。
  2. 若网络N与此路由器直接相连,则把数据报直接交付给目的主机D,这称为路由器的直接交付;否则就是间接交付。
  3. 若路由表有目的地址为D的特定主机路由(对特定的目的主机指明一个特定的路由,通常是为了控制或测试网络,或出于对安全的考虑才采用的),则把数据报传送给路由表中所指明的下一跳路由器。
  4. 若路由表中有到达网络N的路由,则把数据报传送给路由表指明的下一跳路由器。
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器。
  6. 否则就报告转发分组出错。

路由表更新:通过 route 命令或者其他工具可以手动修改路由表(静态),使用 BGP(Boder Gateway Protocol,边际网关协议)、RIP(Routing Information Protocol,路由信息协议)、OSPF 等协议,可以动态且自动的更新路由表。

在路由转发的过程中,IP 源地址和目的地址在转发过程中是始终不变的(一种例外是源路由选择)。而数据帧头部的源 MAC 地址和目的 MAC 地址在转发过程中是一直变化的。

网络地址转换NAT(Network Address Translation)

先来了解下什么是专用地址:专用地址是专门用作一些只需内部通信的机构使用的地址,无需连接到因特网,路由器看到专用地址就不转发,所以说专用地址作为目的地址是不可能在因特网上被传送的。

NAT的作用:所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。

  1. 离开专用网时:替换源地址,将内部地址替换为全球地址。
  2. 进入专用网时:替换目的地址,将全球地址替换为内部地址。

ARP地址解析协议 (Address Resolution Protocol )

作用:从 IP 地址解析出 MAC 地址。

每台主机或路由器在其内存中具有一个ARP表(ARP table),这张表包含IP地址到MAC地址的映射关系。 该ARP表也包含一个寿命(TTL)值,它指示了从表中删除每个映射的时间。 每台主机设有一个ARP 高速缓存 (ARP cache)来存放ARP表。注意到这张表不必为该子网上的每台主机和路由器都包含一个表项,因为某些可能从来没有进入到该表中,某些可能已经过期。从一个表项放置到某ARP表中开始,一个表项通常的寿命值是20分钟。

ICMP (Internet Control Message Protocol)

ICMP (Internet Control Message Protocol) 允许主机或路由器报告差错情况和提供有关异常情况的报告,ICMP最典型的用途是差错报告。ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。ICMP 报文的格式如下图:

ICMP 报文的种类有两种:ICMP差错报告报文和ICMP询问报文。

对于ICMP差错报告,有以下四种类型(注意,一些教材上提到的“源点抑制”已经不再使用):

  1. 终点不可达:路由器或主机不能交付数据报时就向源点发送终点不可达报文。
  2. 时间超过:路由器收到生存时间为零的数据报,或者不在预先规定的时间内收到一个数据报的全部数据报片时,丢弃已收到的数据报并向源点发送时间超过报文。
  3. 参数问题:路由器或目的主机收到的数据报首部中有的字段值不正确,就丢弃所有已收到的该数据报片并向源点发送参数问题报文。
  4. 改变路由(重定向):路由器把改变路由报文发送给主机,让主机直到下次应将数据报交给另外的路由器。(简单来说:路由器早已通过和其它路由器交换信息,确认了比自己更优的转发路径。于是如果主机传送数据报时经过了该路由器,该路由器就会发送改变路由报文给主机,告诉它,最佳路线不是我哦,你应该选择另一个路由才能走最佳路线呢!)

ICMP 的应用举例:

  1. PING (Packet InterNet Groper) 作用是用来测试两个主机之间的连通性。它使用了 ICMP 回送请求与回送回答报文。是应用层直接使用网络层 ICMP 的例子,没有通过运输层的 TCP或UDP。
  2. Traceroute,这是UNIX操作系统中名字。在 Windows 操作系统中这个命令是 tracert。它用来跟踪一个分组从源点到终点的路径。利用 IP 数据报中的 TTL 字段、ICMP 时间超过差错报告报文和ICMP 终点不可达差错报告报文实现对从源点到终点的路径的跟踪。

参考文章

  1. 计算机网络 - IPv4 常考知识点详解(超详细!)_ipv4分组-CSDN博客
  2. TCP/IP协议详解_tcpip协议-CSDN博客
  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

红茶川

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

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

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

打赏作者

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

抵扣说明:

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

余额充值