小白学TCP/IP(四)IP协议篇

2024-04-25 23:48
文章标签 ip 协议 tcp 小白学

本文主要是介绍小白学TCP/IP(四)IP协议篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IP协议篇

网络层与数据链路层之间的关系

网络层负责端到端之间(消息发送端与消息接收段)的通信,但至于中间消息是怎样被转发的,得通过数据链路层实现,也就是说数据链路层负责每个数据链路从源MAC地址到目标MAC地址之间的数据传输,而网络层则是规定了数据最开始的发送端和最终的接收端.

把这个过程比喻成快递运输,假如我在北京要发送一个快递到武汉市华中科技大学机械大楼,IP层完成的任务就是在快递单上写上寄件人地址和收件人地址(源地址和目的地址)和其他信息,然后贴到快递包裹上,然后快递点通过一张规定好的快递传输信息表(比如目的地为武汉,则直接发送到郑州快递中转站),这张信息表在网络传输中叫做路由控制表,这样快递就从寄件人----北京----郑州中转站----武汉总站----华中科技大学站----华中科技大学机械学院----收件人手中,其中北京到郑州中转站之间的传输即为数据链路层的传输,只负责从一个中转点运输到下一个中转点(数据链路层的主要作用是在互联同一种数据链路的节点之间进行包传递)

IP协议为什么是面向无连接的

IP面向无连接,在发包之前不需要建立与对端目标地址之间的连接,将这个功能实现委托给了TCP层去实现.

  • 为了简化,面向连接比起面向无连接处理相对复杂.
  • 为了提速,面向连接每次通信之前都要建立连接,会降低处理速度.
  • 分层实现不同的功能,IP只负责将数据发给目标主机,而TCP负责保证对端主机确实接收到数据.每一层的分工明确,简化协议的实施与编程,有利于协议今后的扩展和性能优化.

IP地址分类

IP地址(32位)分为四个级别,分别是A类,B类,C类,D类.

A类地址
首位以0开头,从第1位到第8位是它的网络标识
十进制表示: 0.0.0.0~127.0.0.0是A类的网络标识,后24位用于主机标识
一个网段可容纳主机地址上限为:16,777,214个
B类地址
首位以10开头,从第1位到第16位是它的网络标识
十进制表示: 128.0.0.0~191.255.0.0是A类的网络标识,后16位用于主机标识
一个网段可容纳主机地址上限为:65,534个
C类地址
首位以110开头,从第1位到第24位是它的网络标识
十进制表示: 192.0.0.0~223.255.255.0是A类的网络标识,后8位用于主机标识
一个网段可容纳主机地址上限为:254个
D类地址
首位以1110开头,从第1位到第32位是它的网络标识
十进制表示: 224.0.0.0~239.255.255.255是A类的网络标识,没有主机标识,常被用于多播.

补充知识:
主机标识位上不可以全是0或者全是1,这两种情况有特殊用处
全是0代表对应的网络地址或IP地址不可获知的情况
全是1的主机地址通常被作为广播地址

子网掩码

引入子网后,IP地址就有了两种识别码,一个是IP地址本身,一个是表示网络部的子网掩码

子网掩码的作用: 将IP地址划分为更小粒度的网络,而不再受限于ABCD类地址划分方式.

子网掩码的构成: 采用32位二进制表示,对应IP地址网络标识部分的位全部为"1",对应主机标识部分的位全部为"0".

子网掩码的两种表示方式:
以172.20.100.52的前26位为网络标识为例

  • IP地址:172.20.100.52 子网掩码:255.255.255.192
  • IP地址:172.20.100.52/26(直接在IP地址后面追加网络地址的位数,用"/"隔开)

路由控制

路由控制表的作用:
发送数据包所使用的地址为网络层的地址(IP地址),但是仅仅有IP地址无法完成将数据包传输到对端目标地址,因为中间可能存在很多数据链路.在数据发送过程中还需要指明路由器或主机的信息,保存这种信息的就是路由控制器.

路由控制表的形成方式:

  • 静态路由控制:由管理员手动设置
  • 动态路由控制:路由器与其他路由器相互交换信息时自动刷新

路由控制转发的原理:

前提: 路由控制表中记录着网络地址和对应的下一步应该转发的路由器的地址.

在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发至对应的下一个路由器(如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址,即相同位数最多的网络地址,例如172.20.100.52的网络地址与172.20/16和172.20.100/24两项都是匹配的,但是172.20.100/24是最吻合的,应该转发到该地址对应的路由器.

补充知识:
环回地址:环回地址是在同一台计算机上不同程序之间进行网络通信所使用的默认地址,即127.0.0.1,也可以用localhost来代替,使用该IP时,数据包并不会流向网络.

IP分割处理与再构成

每种数据链路的使用目的不同,所以可承载的MTU也不同

为何需要将IP报文分割
每个数据链路的最大传输单元(MTU)不尽相同,一旦IP报文的大小比数据链路中最小的MTU大的时候,就会发生IP报文分割,也就是分片.(可以理解为数据链路的运输能力不够,只能将单个报文分割成多个报文运输)

为何经过分片后的IP数据报的重组只能由目标主机进行
如果在中途重组,有可能在之后又面临分片的尴尬处境,这会给路由器带来多余的负担,也会降低网络传输效率.

路径MTU发现

路径MTU:是指从发送端主机到接收端主机之间不需要分片时最大的MTU大小,也就是路径中所有数据链路中最小的MTU.

路径MTU发现原理:

  1. 首先源地址将数据报的分片标志位设置为不分片,并将IP数据报发送出去
  2. 路径上任何需要将分组进行分片的设备都会将这种数据报丢弃并返回“数据报过大和当前数据链路允许的最大MTU“的ICMP响应到源地址
  3. 源地址主机将IP分片,并重新设置最大MTU,再次将IP数据报发送出去
  4. 不断探索发送直到不再收到ICMP响应,这样源主机就”学习“到了无需分片就能通过这条路径的最大的最大传输单元。
    [外链图片转存失败(img-fi9yRcRw-1565752177829)(https://raw.githubusercontent.com/zrysmt/mdPics/master/HTTP协议/tcp-ip/12.png)]

IPv4首部

IP首部中包含用于IP协议进行发包控制时所有的必要信息

属性大小(比特)作用举例(补充说明)
版本4标识IP首部的版本号IPv4的版本号为4
首部长度4表明首部的大小,单位为4字节(32比特)没有可选项时,首部长度设置为5,即IP首部长度为4*5=20字节
区分服务8表明服务质量基本被所有网络无视,没有投入使用
总长度16IP首部+数据部分的总字节数IP包的最大长度为65535(=2的16次方)字节
标识16用于分片重组单个IP数据报被分割后的分片,该标识相同
标志3表示包被分片的相关信息第1个比特未使用,目前必须为0,第二个比特表示是否分片,第三个比特表示被分片的情况下是否为最后一个包
片位移13标识被分片的每一个分段相对于原始数据的位置第一个分片对应的值为0
生存时间8可以中转多少个路由器每经过一个路由器,TTL减1,变为0则丢包,可以避免IP包在网络内无限传递
协议8表示IP包传输层的上层协议编号TCP编号为6,UDP编号为17
首部校验和16校验数据报的首部,确保IP数据报不被破坏
源地址32表示发送端地址
目标地址32表示接收端地址

IPv6

IPv6是为了根本解决IPv4地址耗尽的问题而被标准化的网际协议.

IPv4地址长度为4个8位字节,即32比特,而IPv6的地址长度为128比特,一般写成8个16位字节.

IPv6用十六进制表示(8个16位字节)
FEDC:BA98:7654:3210:FEDC:BA98:7654:3210

IPv6地址区分

地址名称区别
全局单播地址全世界唯一的一个地址
链路本地单播地址同一个数据链路内唯一的地址
唯一本地地址不进行互联网通信时所使用的地址

这篇关于小白学TCP/IP(四)IP协议篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936135

相关文章

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

linux下查看自己的外网ip

局域网的服务器是通过ADSL路由器连接外网的,但ADSL是从ISP运营商那儿通过动态获得IP的,那么我怎么知道自己的外网地址是多少呢? 今天得到几个办法: curl -s http://whatismyip.org wget http://whatismyip.org 然后再  cat index.html 也可以看到

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请

linux下TCP/IP实现简单聊天程序

可以在同一台电脑上运行,在一个终端上运行服务器端,在一个终端上运行客户端。 服务器端的IP地址要和本地的IP相同,并分配端口号,客户端的默认设置为本地,端口号自动分配。 服务器端: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消