• 网络基础:数据包,通信


    网络基础

    TCP/IP四层模型

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t6cgBDMu-1668430726199)(/home/guojiawei/.config/Typora/typora-user-images/image-20221108231223954.png)]

    TCP/IP网路协议栈分为:

    • 应用层(Application)
    • 传输层(Transport)
    • 网络层(Network)
    • 链路层(Link)

    一般在应用开发过程中,讨论最多的是TCP/IP模型

    数据包的封装

    为什么要封装?

    ​ 用户信息不可能直接丢到网络里进行传输,所以必须经过操作系统的一层一层的封装后,才可以交给网络进行传输。

    怎么封装?

    1. 首先,用户数据会在应用层封装首部,这一阶段是由用户进程进行封装的

    2. 然后,操作系统会在传输层,网络层和数据接口层分别封装上TCP首部,IP首部和以太网帧的首尾两部分。

    3. 最后,数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。

    不同的协议层对数据包有不同的称谓

    • 在传输层叫做段(segment)
    • 在网络层叫做数据报(datagram)
    • 在链路层叫做帧(frame)

    通信过程

    这里指的是:两台计算机通过TCP/IP协议通讯的过程

    两台计算机在同一网段中

    • 应用层主要处理应用程序的细节,由用户进程完成
    • 传输层,网络层,链路层负责处理通信的细节,由操作系统完成
    两台计算机在不同的网段中

    不同之处在于:

    数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器

    链路层
    • 链路层有以太网、令牌环网等标准

    • 链路层负责网卡设备的驱动、帧同步、冲突检测、数据差错校验等工作

    • 交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧

      • 比如以太网和令牌环网之间
      • 由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发
    网络层
    • 网络层的IP协议是构成Internet的基础

    • Internet上的主机通过IP地址来标识

    • Internet上有大量路由器负责根据IP地址选择合适的路径转发数据包

    • 路由器是工作在第三层的网络设备,同时兼有交换机的功能

    • 路由器可以在不同的链路层接口之间转发数据包,所以路由器往往需要将进来的数据包拆掉网络层和链路层两层首部并重新封装

    • IP协议不保证传输的可靠性,数据包在传输过程中可能丢失

      可靠性可以在上层协议或应用程序中提供支持

    正是因为IP地址的存在,所以网络可以判断出要把数据发送给谁;而发送的过程需要路由器进行寻址,通过查自己的路由表,得出一条可传给目的主机的一条通路。

    网络层负责点到点(ptop,point-to-point)的传输(这里的“点”指主机或路由器)
    而传输层负责端到端(etoe,end-to-end)的传输(这里的“端”指源主机和目的主机)
    
    • 1
    • 2
    传输层
    • TCP是一种面向连接的、可靠的协议
    • TCP传输的双方需要首先建立连接
    • 由TCP协议保证数据收发的可靠性
    • UDP是无连接的传输协议,不保证可靠性
    • 使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作
    • TCP有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接
    • UDP有点像寄信,信写好放到邮筒里,既不能保证信件在邮递过程中不会丢失,也不能保证信件寄送顺序

    以太网帧格式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMrignam-1668430726200)(/home/guojiawei/.config/Typora/typora-user-images/image-20221111221632168.png)]

    1. 6位目的地址,6位源地址,2位类型,4位CRC(检错和纠正)

    2. 这里的目的地址和源地址是硬件地址,也就是mac地址

      源地址和目的地址是指网卡的硬件地址(也叫MAC地址,网卡编号)

    3. 这里有三种类型:对应IP、ARP、RARP

      1. 0800----数据包
      2. 0806----请求对方的mac地址

    1. 帧尾是CRC校验码
    查看MAC地址

    ifconfig命令

    • 以太网帧中的数据长度规定最小46字节,最大1500字节
    • 最大值1500称为以太网的最大传输单元(MTU)
    • MTU这个概念指数据帧中有效载荷的最大长度,不包括帧头长度

    ARP数据报

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QM3qAWP7-1668430726201)(/home/guojiawei/.config/Typora/typora-user-images/image-20221112211624059.png)]

    这里的:PAD是填充的意思,因为ARP报文只有28字节,而以太网帧的IP数据包最低要求46字节,所以要填充18字节PAD,但是这里面的信息是无用的

    ARP数据报的格式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bSEmGwil-1668430726202)(/home/guojiawei/.config/Typora/typora-user-images/image-20221112211851400.png)]

    这里面的重点:

    • 6字节的发送端以太网地址:也就是mac,4字节的发送端IP地址
    • 6字节的目的以太网地址:也就是mac,4字节的目的IP地址

    一个具体的例子


    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hRafSsYi-1668430726203)(/home/guojiawei/.config/Typora/typora-user-images/image-20221112213603334.png)]

    • 发送端IP: 192.168.1.20

    • 接收端IP:192.168.10.45

    • 连接两者的若干路由器,有一个路由器的:

      • Ip地址:192.168.1.35
      • mac地址:00:0C:29:0a:C4:ba

    ​ 对于发送端,在发送arp请求时,由于不知道目的mac,所以先将目的mac填全0,然后源mac地址填自己的网卡地址,类型填0806----arp报文,然后关注:arp报文中的发送mac地址,发送ip地址,接收mac地址,接受ip地址。其中发送端一定知道接收端的ip地址,然后不知道接收端的mac地址,填入全0

    注意:arp的目的端ip是下一跳的路由器,而最终的接收端ip是:封装在ip协议

    ​ 然后把该arp数据包,发送到网络中,相连接的路由器会接收,然后收到该报文的,如果发现目的mac全零,然后去匹配接收端ip和自己的ip,匹配不上丢弃该包;匹配上了,把自己的mac地址填入;然后改一下目的mac和源mac:目的mac----发这个arp的源mac;源ip----自己的mac也就是上一个接收端

    ​ 然后发送端就得到了想要的接收端的mac地址,然后取出填入了目的mac

    在网络通讯时:

    • 源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,但是数据包首先是被网卡接收到再去处理上层协议的
    • ARP协议就起到----获得目的主机的硬件地址的作用
    1. 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少
    2. 将这个请求广播到本地网段
    3. 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中

    每台主机都维护一个ARP缓存表,可以用arp -a命令查看

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gk4FMVdl-1668430726204)(/home/guojiawei/.config/Typora/typora-user-images/image-20221112220153606.png)]

    • 缓存表中的表项有过期时间

    数据包寻路小结

    前文已经讲过:

    发送的的数据包,需要封装一层应用层首部,传输层首部,网络层首部,以及以太网的帧头和帧尾

    在发送arp包的过程中,从发送端A到接收端B中间会有许多的路由器,然后路由器会对接收的数据包进行拆包和封装的过程,注意数据包会被拆解到网络层,因为需要接收端的ip

    A发送的arp数据报的目的ip是它下一条的路由表,路由表接收,把数据包拆解到网络层,根据最后的接收端和自己的路由表,填好下一条路由器IP地址作为自己arp报文的目的ip.

    路由表自己可以寻路

    为了避免某些路由器故障,出现数据包在几个路由器中转圈,为了避免网络拥塞,需要限定路由器的跳数的上限

    ip段格式


    这里的ip段对应的是:以太网帧的数据部分

    • 版本号只有:ipv4和ipv6两种,但是一般是ipv4

    • 首部长度就是“该协议刨去数据部分的长度”

      由于首部有“选项”,所以首部长度是不定的

      • 首部长度的数值是以4字节为单位的
      • 首部长度最小:4x5=20字节,也就是不带任何选项的IP首部
      • 4位能表示的最大值是15,首部长度最大是60字节

    IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍

    • 16位总长度:是ip数据报总体的长度(首部长度+数据)

    • 8位TTL(Time to live),最多可表示数值:
      2 8 = 256 2^8=256 28=256

      源主机为数据包设定的一个生存时间

      比如64,每过一个路由器就把该值减1,如果减到0就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包.

      因此这个生存时间的单位不是秒,而是跳(hop)

    • 32位的源ip地址和32位的目的ip地址-----这里对应的是发送方和接收方

    要区别:以太网帧的目的ip是下一条路由器地址


    • 协议字段指示上层协议是TCP、UDP、ICMP还是IGMP
    • 8位TOS字段有3个位用来指定IP数据报的优先级(目前已经废弃不用)
    • 4个位表示可选的服务类型(最小延迟、最大吞吐量、最大可靠性、最小成本)

    UDP

    这里的端口号:描述进程

    比如区分是:qq还是飞书

    源端口号0x05d4(1492)是客户端的端口号

    目的端口号0x0045(69)是TFTP服务的well-known端口号

    • UDP报长度为63字节,包括UDP首部UDP层pay-load的长度
         一般的网络通信都是像TFTP协议这样,通信的双方分别是客户端和服务器:
            客户端主动发起请求,而服务器被动地等待、接收和应答请求
    ----------客户端的IP地址和端口号唯一标识了该主机上的TFTP客户端进程
    ----------服务器的IP地址和端口号唯一标识了该主机上的TFTP服务进程
    
    • 1
    • 2
    • 3
    • 4

    客户端是主动发起请求的一方,它必须知道服务器的IP地址服务进程的端口号

    一些常见的网络协议有默认的服务器端口:

    • HTTP服务默认TCP协议的80端口
    • FTP服务默认TCP协议的21端口
    • TFTP服务默认UDP协议的69端口

    TCP

  • 相关阅读:
    uwb人员定位系统:人员轨迹实时定位
    【服务器使用】vscode & winscp进行服务器容器连接(含修改初始密码)
    Java环境变量配置详细教程
    渗透攻防Web篇-深入浅出SQL注入
    java学习之包
    【Docker】Docker安装
    Java并发常见面试题
    0基础,跟我一起学python--基础篇(3)
    Flink通讯模型—Akka与Actor模型
    【2023米哈游-2】数组相关
  • 原文地址:https://blog.csdn.net/weixin_47173597/article/details/127855519