zoukankan      html  css  js  c++  java
  • 分布式通信基础

    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也可以关闭连接了

  • 相关阅读:
    Leetcode Substring with Concatenation of All Words
    Leetcode Divide Two Integers
    Leetcode Edit Distance
    Leetcode Longest Palindromic Substring
    Leetcode Longest Substring Without Repeating Characters
    Leetcode 4Sum
    Leetcode 3Sum Closest
    Leetcode 3Sum
    Leetcode Candy
    Leetcode jump Game II
  • 原文地址:https://www.cnblogs.com/xiaobingqianrui/p/9181310.html
Copyright © 2011-2022 走看看