• 分布式通信基础


    1. 分布式通信基础思维导图

      

    2. IP协议

    2.1 ICMP协议

      ICMP协议(Internet Control Message Protocol),Internet控制报文协议,其作用就是探测网络连接,该协议提供了简单的出错报告信息,发送的出错报文会返回到发送数据的源端,发送端随后可根据ICMP报文确定发生错误的类型,并确定如何才能更号地重发失败的数据包。需要注意的是ICMP只负责报告错误,而如何处理特定的错误,则由发送端自己决定。

    2.2 IPV4协议头部

    (1)版本:对于IPv4版本的IP协议来说,其值是4

    (2)首部长度:用于指定当前IP头部的总长度(单位为32位),由于该字段为4位,所以最大十进制为15,IP协议头部的总长度为15*32/8 = 60字节

    (3)服务类型:用于分配优先级、延迟、吞吐量以及可靠性,该字段的最高3bit用于定义IP优先级,可以定义8种不同的服务优先级。其次第3到第6bit用于定义最低延迟、最高吞吐量、可靠性和最小开销,而最后1bit则必须置0,注意,第3至第6bit的定义中,至多只能有一位置1,应用程序需要根据特定需求来进行置位

    (4)长度:定义整个IP数据报的总字长

    (5)认证:用于对IP数据报进行唯一标识,其值从一个随机数开始,随着发送的IP数据报每次加1,不过,对于字长超过MTU的IP数据报,拆分后发送的数据报具有相同的认证

    (6)标志:该字段长度为3位,第一位为保留字段,第2位置1则表示禁止对IP数据报拆分,如果将该位置置为1,那么网络层将不会对IP数据报进行拆分,取而代之的是返回一个ICMP差错报文,第3位表示是否含有更多的分片,除了最后一个分片以外,其它IP数据报都应该置为1

    (7)段偏移量:表示分片相对于原始IP数据报开始处的偏移量

    (8)TTL:用于指定数据报到达目的地之前允许经过的最大路由跳数

    (9)协议:表示当前上层所使用的协议类型

    (10)校验和:通过CRC算法计算出来,用于检查接收到的数据是否正确

    (11)源IP地址

    (12)目的IP地址

    (13)选项:40字节

    2.3 路由与转发规则

    确定了路由之后,将IP报文封装成数据链路层的帧并转发到对应端口上。

    路由匹配规则:

    (1)路由最长匹配原则:我们优先选择子网掩码最长的路由表项进行匹配,因为掩码越长,表示网络号越长,代表其网络范围越小,越精确

    (2)路由迭代查找原则

    (3)默认路由匹配原则:在路由器中加入一条IP地址和子网掩码均为0.0.0.0的路由表项

    子网掩码的有趣解释:
      
    作者:车小胖
    链接:https://www.zhihu.com/question/56895036/answer/150953183
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    从前有一个地主,有256间房子,地主家的门牌号码是“192.168.1”,那么他家第一间房子的门牌号码是192.168.1.0,第二间是192.168.1.1,…第256间的编号是192.168.1.255。

    地主老了,需要把256间房子分给4个儿子,平均分配,每个儿子可以分64间。

    请来一位先生主持公道,先生这么来操作:
    192.168.1.0-192.168.1.63 分给大儿子
    192.168.1.64-192.168.1.127 分给二儿子
    192.168.1.128 -192.168.1.191 分给三儿子
    192.168.1.192-192.168.1.255 分给四儿子

    那如何来描述四个儿子的子网网段呢?
    192.168.1.0/26
    192.168.1.64/26
    192.168.1.128/26
    192.168.1.192/26

    /26是什么鬼?
    255.255.255.192的二进制是多少? “11111111-11111111-11111111-11”大家数数一共多少个1?不用数了,是26个1,为了简化子网掩码的表示,用/26代替255.255.255.192。

    按位与运算
    我们来看大儿子的网段192.168.1.0/26是如何得到的?

    以大儿子的房间为例:
    192.168.1.0-192.168.1.63

    二进制表示:
    192.168.1.0

    11000000.10101000.00000001.00000000

    192.168.1.63

    11000000.10101000.00000001.00111111

    首尾地址完全相同的是多少?
    11000000.10101000.00000001.00

    数数一共多少位?26位!那么用这个“192.168.1.0/26”就可以表示大儿子所有房间。

    对照房间的门牌号码“192.168.1.199”,很显然属于四儿子的。


    一个主机192.168.1.199/26 能否和直连主机192.168.1.200/24 通信?可以的因为都是四儿子的房间。

    一个主机192.168.1.199/26 能否和直连主机
    192.168.1.1/24 通信? 不可以因为一个是大儿子的房间,一个是四儿子的房间,无法直连通信!

    3. TCP协议

      TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP协议支持超时重传和确认机制,确保了发送消息的可靠性

    3.1 TCP协议头部结构

      

    3.2 3次握手和4次分手协议

    A. 3次握手协议

    (1)第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号

    (2)第二次握手:服务器收到SYN包,必须确认客户SYN(ack=j+1),同时发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

    (3)第三次握手:客户端收到SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接状态),完成3次握手

    B. 4次分手协议

    (1)第一次分手:主机1(可以是客户端也可以是服务器),设置Sequence Number和Acknowledge NUmber,向主机2发送一个FIN报文段;此时主机1进入FIN_WAIT_1状态,这表示主机1没有数据要发送到主机2

    (2)第二次分手:主机2收到主机1发送的FIN报文段,向主机1回复一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态,主机2告诉主机1,为同意你的关闭请求

    (3)第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入CLOSE_WAIT状态

    (4)第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态,主机2收到主机1的ACK报文段以后就关闭连接,此时,主机1等待2MSL后依然没有收到回复,证明server端已正常关闭,那号,主机1也可以关闭连接了

  • 相关阅读:
    后端框架:SpringBoot+Mybatis+Dubbox(zookeeper+dubbo-admin)
    java代码执行mysql存储过程
    SpringBoot整合Junit
    摘要算法之MD5
    java如何控制下载的文件类型是txt还是doc?如何将文件名返回给前端?Content-disposition
    Android Atuido 连接模拟器
    verilog CRC 校验
    Altium Designer(AD软件)如何导出gerber文件
    SpringBoot集成mybatisplus
    C++ | 通过智能指针实现资源管理
  • 原文地址:https://www.cnblogs.com/xiaobingqianrui/p/9181310.html
Copyright © 2020-2023  润新知