精华内容
下载资源
问答
  • 针对无线认知传感器网络的资源有限性和频谱动态分配,提出了基于首要信道半双工的无线认知传感器网络广播协议。在没有公共信道和时钟同步的情况下,该协议通过单个收发机的收发状态转换和信道表的交换进行网络的初始...
  • 针对节点随机分布的无线Ad hoc网络中数据广播风暴问题,设计了一种基于网络编码的数据广播协议ENCBP。ENCBP采用了渐进式随机线性网络编码技术、自适应概率转发机制以及随机延迟发送机制。NS2仿真结果表明,与现有...
  • 网络游戏-基于SIP协议网络广播系统及其广播方法.zip
  • 针对节点随机分布的无线Ad hoc网络中数据广播风暴问题,设计了一种基于网络编码的数据广播协议ENCBP。ENCBP采用了渐进式随机线性网络编码技术、自适应概率转发机制以及随机延迟发送机制。NS2 仿真结果表明,与现有数据...
  • 本文档是IP网络公共广播系统的SDK(Software Development Kit)协议说明,可向第三方软件提供状态输出,接收第三方软件的控制输入。 通过本协议,第三方软件发送UDP数据包到广播服务软件来控制。这种方式具有以下优点...
  • 网络协议 -- UDP协议(3)广播

    万次阅读 2017-12-29 16:36:11
    UDP的广播和单播的不同在于发送端(接收端的实现和单播方式没有区别)的实现上: 1. 发送端将套接字配置为发送广播...广播地址分为受限的广播、指向网络广播、指向子网的广播、指向所有子网的网广播。255.255.255.

    UDP的广播和单播的不同在于发送端(接收端的实现和单播方式没有区别)的实现上:
    1. 发送端将套接字配置为发送广播消息,使用setsockopt函数。
    2. 发送地址更改为受限的广播地址255.255.255.255

    需要说明的是广播地址不仅仅只有255.255.255.255一个。广播地址分为受限的广播、指向网络的广播、指向子网的广播、指向所有子网的网广播。255.255.255.255只是受限的广播地址。

    一、发送端代码

    #include <WinSock2.h>
    #pragma comment(lib, "Ws2_32.lib")
    
    void SendLogic() {
        WSADATA wsaData;
        WORD wVersionRequested = MAKEWORD(1, 0);
        WSAStartup(wVersionRequested, &wsaData);
    
        SOCKET socket = ::WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, nullptr, 0, 
    展开全文
  • 基于传统的洪泛,提出了一种高效广播协议(EBP,Effective Broadcast Protocol)。通过对广播过程中一个节点转播之后其邻域内其它节点的转播,即引发新转播的讨论,完成了对最佳引发新转播的分析。EBP 广播协议以此...
  • 用UDP协议实现网络语音广播...............
  • 计算机网络协议——通信协议综述

    万次阅读 多人点赞 2019-09-03 23:20:58
    通信协议综述概述一、为什么学习网络协议1.1 常见的网络协议二、网络分层的真正含义2.1 为什么网络要分层?2.2 浏览点击请求过程2.3 揭秘层与层之间的关系三、ifconfig 命令行的由来3.1 ip地址3.2 无类型域间选路...

    这个专栏的计算机网络协议,我是在极客时间上学习 已经有三万多人购买的刘超老师趣谈网络协议专栏,讲的特别好,像看小说一样学习到了平时很枯燥的知识点,计算机网络的书籍太枯燥,感兴趣的同学可以去付费购买,绝对物超所值,本文就是对自己学习专栏的总结,评论区可以留下你的问题,咱们一起讨论!


    概述

    本文也是根据专栏里的板块,对通信网络协议做一个综述,共分为四节去进行介绍;

    • 为什么学习网络协议?
    • 网络协议分层的真正含义;
    • ifconfig命令行的背后;
    • DHCP和PXE:ip的由来;

    一、为什么学习网络协议

    协议

    协议的三要素是:语法、语义、顺序
    连通互联网世界,只教给一台电脑做什么是不够的,需要教会一大片机器做什么,这就是网络协议。只有通过网络协议,才能够使得一大片机器互相协作、共同完成一件事。

    1.1 常见的网络协议

    采用一个下单购物的场景,看看整个过程运用了哪些网络协议。


    首先,在浏览器中输入一个网址www.taobao.com URL,浏览器只知道名字是www.taobao.com,但是不知道具体的地点,所以不知道该如何访问;

    于是,打开地址簿去查找,可以使用一般的地址簿DNS去查找,也可以采用更为精确的地址簿查找协议HTTPDNS

    无论哪一种查找,最后都会得到一个地址:106.114.134.24(任意赋值),这个是IP地址,相当于你在互联网世界中的“门牌号”。知道了目标地址,浏览器开始打包他们的请求。对于普通的浏览请求,往往会采用HTTP协议;但是对于购物的请求,往往需要进行加密传输,因而使用HTTPS协议。无论是什么协议,里面都会声明“你要买什么和买多少”。HTTP头中包含了请求的信息:

    HTTP
    DNS、HTTP、HTTPS所在的层为应用层;


    经过封装以后,浏览器会将应用层的包交给下一层去完成,然后通过socket编程来实现。下一层是传输层,传输层有两种协议:

    • 无连接的协议UDP
    • 面向连接的协议TCP

    对于支付来说,往往采用TCP协议,所谓的面向连接就是,TCP会保证这个包能够到达目的地。如果不能到达,就会重新发送,直至到达;TCP协议中有两个端口,一个是浏览器监听的端口,一个是电商服务器监听的端口。操作系统往往通过端口来判断,它得到的包应该给哪个进程;
    TCP协议


    传输层封装完之后,浏览器会将包交给操作系统的网络层。网络层的协议是IP协议,在IP协议里面会有源IP地址,即浏览器的所在的机器的IP地址和目标IP地址,也就是电商所在的IP地址
    IP地址
    目标IP就是电商地址的门牌号,操作系统知道了目的地的门牌号,就要想着该如何找到目的地;

    首先先判断,目的地是在本地还是在外地;电商系统一般都在那遥远的地方,就比如你到国外要去海关一样,去外地就要经过网关。操作系统启动以后,就会被DHCP协议配置IP地址,以及默认的网关IP地址192.168.1.1;

    如果是本地通信就是靠吼——ARP协议,操作系统大吼一声,谁是192.168.1.1啊?网关会回答它,我就是。这个本地地址就是MAC地址,吼靠的就是ARP协议;

    IP包

    于是操作系统将IP包交给了下一层,也就是MAC层。网卡再将包发出去,包里面包含MAC地址,因此可以到达网关。网关收到包以后,会根据自己的知识,判断下一步该怎么走。网关往往是一个路由器,到了某个IP地址应该怎么走,这个叫作路由表

    路由器就像唐僧西天取经路过的一个个国家之间的城关,每个城关都连接着两个国家,每一个国家都相当于一个局域网,每个国家的内部都可以使用MAC地址进行通信;

    一旦跨越城关,就需要拿出IP头来,里面记录着IP源地址(东土大唐),欲前往西天拜佛取经(目的IP地址),路过宝地,借宿一晚,请问接下来该如何走?
    在这里插入图片描述
    城关与城关之间的沟通协议叫做路由协议,常用的由OSPF和BGP

    城关与城关之间是一个国家,网络包知道了要去哪个城关的时候,还是要使用国家内部的MAC地址,通过下一个城关的MAC地址,找到下一个城关,然后在问下一步该怎么走,一直走到最后一个城关。最后一个城关知道这个网络包要去的地方。于是,对着这个国家吼一声,谁是目标IP啊?目标服务器就会回复一个MAC地址。网络包过关后,通过这个MAC地址就能找到目标服务器;


    目标服务器发现MAC地址对上了以后,取下MAC头来,发送给操作系统的网络层,发现IP地址对上了,在取下IP头。IP头里会写上一层封装的TCP协议,然后交给传输层,即TCP层

    在这一层中,对于收到的每个包,都会有一个回复说明收到了。这个回复的包绝非这次单次请求的结果,例如购物是否成功,扣了多少钱等,而仅仅是TCP层的一个说明,即收到之后的回复。当然这个回复,会沿着刚才来的方向走回去,报个平安,防止在传输过程中造成的丢包等。

    如果过一段时间还没有收到的话,发的端TCP层会重新发送这个包,还是上面的请求,直到收到平安到达的回复。这个重试绝非你的浏览器重新将下单这个动作重新请求一次。对于浏览器来讲,就发送了一次下单请求,TCP层不断自己闷头重试。除非TCP这一层出了问题,例如连接断了,才轮到浏览器的应用层重新发送下单请求。

    当网络包平安到达TCP层之后,TCP头中有目标端口号,通过这个端口号,可以找到电商网站的进程正在监听这个端口号,假设一个Tomcat,将这个包发给电商网站。

    电商网站的进程得到的是HTTP请求知道要买什么东西,买多少。往往一个电商网站最初接待请求的这个Tomcat只是个接待员,负责统筹处理这个请求,而不是所有的事情都自己做。例如,这个接待员要告诉专门管理订单的进程,登记要买某个商品,买多少,要告诉管理库存的进程,库存要减少多少,要告诉支付的进程,应该付多少钱,等等。

    如何告诉相关的进程呢?往往通过RPC调用,即远程过程调用的方式来实现。远程过程调用就是当告诉管理订单进程的时候,接待员不用关心中间的网络互连问题,会由RPC框架统一处理。RPC框架有很多种,有基于HTTP协议放在HTTP的报文里面的,有直接封装在TCP报文里面的。

    当接待员发现相应的部门都处理完毕,就回复一个HTTPS的包,告知下单成功。这个HTTPS的包,会像来的时候一样,经过千难万险到达你的个人电脑,最终进入浏览器,显示支付成功;

    看到这里相信你对于自己之前学过的计算机网络知识有一个连串的感觉了吧,很多公司的面试题都会问在浏览器中输入一个URL的整个过程? 把这一连串说完,相信你的面试官也会觉得你学的很扎实;
    网络协议

    二、网络分层的真正含义

    计算机网络知识点需要背诵,但是更是要理解透彻;

    2.1 为什么网络要分层?

    因为不同层次之间有不同的沟通方式,叫做协议。就像一家公司也是分“层次”,分为总经理、经理、组长、员工,每个人之间都有不同的沟通方式;

    因为复杂的程序都要分层,想象网络包就是一段Buffer,或者一块内存,是有格式的。同时,想象自己是一个处理网络包的程序,而且这个程序可以跑在电脑上,可以跑在服务器上,可以跑在交换机上,也可以跑在路由器上。你想象自己有很多的网口,从某个口拿进一个网络包来,用自己的程序处理一下,再从另一个网口发送出去;

    当然网络包的格式很复杂,这个程序也很复杂,复杂的程序都要分层,这是程序设计的要求。

    2.2 浏览点击请求过程

    浏览点击请求过程如下所示:
    在这里插入图片描述
    在这里插入图片描述
    假设你发现这个包的MAC地址和你的相符,那说明就是发给你的,于是需要调用process_layer3(buffer):这个时候,Buffer里面往往就没有二层的头了,因为已经在上一个函数的处理过程中拿掉了,或者将开始的偏移量移动了一下。在这个函数里面,摘掉三层的头,看看到底是发送给自己的,还是希望自己转发出去的;

    如果IP地址不是自己的,那就应该转发出去;如果IP地址是自己的,那就是发给自己的。根据IP头里面的标识,拿掉三层的头,进行下一层的处理,到底是调用process_tcp(buffer)呢,还是调用process_udp(buffer)呢?

    假设地址是TCP,就会调用process_tcp(Buffer)。这时候,Buffer里面没有三层的头,就需要查看四层的头,看这是一个发起,还是一个应答,又或者是一个正常的数据包,然后分别由不同的逻辑进行处理。如果是发起或者应答,接下来可能要发送一个回复包;如果是一个正常的数据包,就需要交给上层了。交给谁呢?是不是有**process_http(buffer)**函数呢?

    如果你是一个网络包处理程序,你不需要有process_http(buffer),而是应该交给应用去处理。交给哪个应用呢?在四层的头里面有端口号,不同的应用监听不同的端口号。如果发现浏览器应用在监听这个端口,那你发给浏览器就行了。至于浏览器怎么处理,和你没有关系;

    浏览器是解析HTML,显示出页面来。当你再次点击鼠标,点击动作被浏览器捕获,于是浏览器知道又会发起另一个HTTP请求了,于是使用端口号,将请求发送给你。

    你应该调用send_tcp(buffer)。不用说,Buffer里面就是HTTP请求的内容。这个函数里面加一个TCP的头,记录下源端口号。浏览器会给你目的端口号,一般为80端口;

    然后调用send_layer3(buffer)。Buffer里面已经有了HTTP的头和内容,以及TCP的头。在这个函数里面加一个IP的头,记录下源IP的地址和目标IP的地址;随后调用send_layer2(buffer),**Buffer里面已经有了HTTP的头和内容、TCP的头,以及IP的头。这个函数里面要加一下MAC的头,记录下源MAC地址,得到的就是本机器的MAC地址和目标的MAC地址。**不过,这个还要看当前知道不知道,知道就直接加上;不知道的话,就要通过一定的协议处理过程,找到MAC地址。反正要填一个,不能空着;

    2.3 揭秘层与层之间的关系

    现实生活中,往往是员工说一句,组长补充两句,然后经理补充两句,最后总经理再补充两句。但是在网络世界,应该是总经理说话,经理补充两句,组长补充两句,员工再补充两句。

    TCP在三次握手时,TCP每一个消息都会带着IP层和MAC层。因为,TCP每次发送一个消息,IP层和MAC层的所有机制都要重新运行一次,所以TCP在三次握手时,IP和MAC也运行了好久。

    只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层;如果一个HTTP协议的包跑在网络上,它一定是完整的。无论这个包经过哪些设备,它都是完整的。所谓的二层设备、三层设备只是跑在设备上的程序不同;

    • 二层设备:只把MAC头摘下来,看看到底是丢弃、转发,还是自己留着;
    • 三层设备:把MAC头摘下来之后,再把IP头摘下来,看看到底是丢弃、转发,还是自己留着;

    三、ifconfig 命令行的由来

    ifconfig是linux系统中查询ip地址的一个命令,windows是ipconfig;

    3.1 ip地址

    IP地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号。
    例如:10.100.122.2就是一个IP地址,地址被分为四个部分,每个部分8个bit,所以IP地址总共是32位;

    IP地址被分成了5类,A-E类
    IP地址
    在网络地址中,A、B、C类主要分为两个部分,前一部分是网络号,后一部分是主机号。大家都是六单元1001号,你是小区A的,我是小区B的;

    ip地址范围

    3.2 无类型域间选路(CIDR)

    无类型域间选路,简称CIDR,将IP地址一分为二,前面是网络号,后面是主机号。10.100.122.2/24,这个IP地址中有一个斜杠,斜杠后面有个数字24,这种地址表示形式,就是CIDR,后面24的意思是,32位中,前24位是网络号,后8位是主机号。

    伴随着CIDR存在的,一个是广播地址,10.100.122.125,如果发送这个地址,所有10.100.122网络内的机器都可以收到,另一个是子网掩码,255.255.255.0

    将子网掩码和IP地址按位计算AND,就可以得到网络号,那么上面的ip地址与子网掩码按位取AND,网络号就是10.100.122.0;(1和任意数值取AND,值不变;0和任意数值取AND,即为0);

    3.3 公有IP地址和私有IP地址

    在这里插入图片描述
    平时我们在办公室、学校、家里的IP地址,一般都是私有IP地址,因为这些地址,允许组织内部的IP地址自己管理、自己分配,因此可以重复。就比如你们学校可能由六单元一号,我们学校可能也有六单元1号。

    但是,一旦离开学校就需要使用公有IP地址,就像上海市南京西路88号,这个是国家同统一分配的。公有IP地址,由相关的组织去分配,如果使用,需要购买。

    192.168.0.x,是最常见的私有IP地址,家里有wifi,对应就有一个ip地址,但是一般家庭中的上网设备不会超过256个,所以/24基本就够用了。

    举例:CIDR中容易犯错的点
    16.158.165.91/22,这个CIDR,求网络中的第一个地址、子网掩码和广播地址
    16.158的部分不会动,它占了前16位。中间的165,变为二进制为‭10100101‬。除了前面的16位,还剩6位。所以,这8位中前6位是网络号,16.158.<101001>,而**<01>.91是机器号**;所以第一个地址是16.158.<101001><00>.1,即16.158.164.1,子网掩码是255.255.<111111><00>.0,即255.255.252.0,广播地址是16.158.<101001><11>.255,即16.158.167.255.

    这五类地址中,还有一类D类是组播地址,使用这一类地址,属于某个组的机器都能够收到,这就有点类似于公司中大家加入了一个邮件组,发送邮件,加入这个组的大家都能收到;

    IP地址的后面有个scope对于eth0这张网卡来讲,是global,说明这张网卡是可以对外的,可以接收来自各个地方的包。对于lo来讲,是host,说明这张网卡仅仅可以供本机相互通信;

    lo又被称为loopback,又称环回接口,往往会被分配到127.0.0.1这个地址,这个地址可以用于本机通信,经过内核处理以后直接返回,不会在任何网络中出现;

    3.4 MAC地址

    在IP地址的上一行是link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff,这个被称为MAC地址,是一个网卡的物理地址,用十六进制,6个byte表示。既然已经知道了MAC地址,是不是意味着直接可以通过MAC地址进行通信啊?

    个网络包要从一个地方传到另一个地方,除了要有确定的地址,还需要有定位功能。 而有门牌号码属性的IP地址,才是有远程定位功能的。

    比如:你要去某某大学某某学院找小明,你在路上问,有些人不知道某某学院,但是可以给你说某某学校在哪里,但是你直接根据 小明的身份证号 问别人知不知道他在哪个学院,那么肯定没人知道;

    MAC地址更像是身份证,是一个唯一的标识。它的唯一性设计是为了组网的时候,不同的网卡放在一个网络里面的时候,可以不用担心冲突。从硬件角度,保证不同的网卡有不同的标识

    MAC地址是有一定的定位功能的,你可以根据ip地址找到某某学校某某学院某号楼某个实验室,当你到了以后,大吼一声,小明 是哪位,那么他听到了 就会回应你;

    MAC地址的通信范围比较小,局限在一个子网里面。例如,从192.168.0.2/24访问192.168.0.3/24是可以用MAC地址的。一旦跨子网,即从192.168.0.2/24到192.168.1.2/24,MAC地址就不行了,需要IP地址起作用了

    总结:

    • ip是地址,有定位功能;MAC是身份证,无定位功能;
    • CIDR可以用来判断是不是本地人;
    • IP分为公有地址IP和私有地址IP

    四、DHCP和PXE:ip的由来

    只要是在网络上跑的包可以有下层没上层,但是不可以有上层没下层;当一个数据包有自己的ip地址,有目的地的ip地址,但是包发不出去的原因是因为,MAC层还没有填写。

    Linux的默认逻辑是,如果是一个跨网段的调用,它便不会将包直接发送到网络上,而是企图将包发送到网关。网关要和当前的网络至少一个网卡是同一个网段;

    4.1 动态主机配置协议(DHCP)

    动态主机配置协议(Dynamic Host Configuration Protocol),简称DHCP

    有了这个协议,网络管理员就轻松多了。他只需要配置一段共享的IP地址。每一台新接入的机器都通过DHCP协议,来这个共享的IP地址里申请,然后自动配置好就可以了。等人走了,或者用完了,还回去,这样其他的机器也能用。

    如果是数据中心里面的服务器,IP一旦配置好,基本不会变,这就相当于买房自己装修。DHCP的方式就相当于租房。你不用装修,都是帮你配置好的。你暂时用一下,用完退租就可以了。

    4.2 解析DHCP的工作方式

    当一台机器加入一个新的网络的时候,只知道自己的mac地址,先吼一句,有人吗?这一步就是DHCP Discover

    新来的机器使用IP地址0.0.0.0发送了一个广播包,目的IP地址为255.255.255.255。广播包封装了UDP,UDP封装了BOOTP。其实DHCP是BOOTP的增强版,但是如果你去抓包的话,很可能看到的名称还是BOOTP协议;

    在这个广播包里,新人喊一句:我是新来的(Boot request),我的MAC地址是多少,但是我还没有ip地址,谁能给我一个?
    在这里插入图片描述
    网络管理员在网络配置了DHCP server,就相当于IP管理员,MAC地址是其唯一的身份。只有MAC地址唯一,IP管理员才能知道这是一个新人,需要租给它一个新的IP地址,这个过程就是DHCP Offer.

    DHCP Offer格式如下:
    里面会有给新人分配的地址;
    DHCP Offer
    DHCP Server仍然使用广播地址作为目的地址。如果同时收到多个IP地址,那么会选择最先到达的DHCP Offer,并且会向网络发送一个DHCP Request广播数据包,其中包含客户端的MAC地址、接受的租约中的IP地址,提供租约的DHCP服务器地址等,并且告诉所有的DHCP Offer,它将接受哪一台服务器所提供的IP地址,感谢其他DHCP服务器,并且请求撤销他们提供的ip地址,以便提供给下一个租用者。

    在这里插入图片描述
    由于还没有收到DHCP server的最后确认,客户端依然使用自己的源ip地址0.0.0.0、255.255.255.255为目标地址进行广播。在BOOTP里面,接受某个DHCP Server的分配 ip;

    当DHCP Server接收到客户机的DHCP request之后,会广播返回给客户机的一个DHCP ACK消息包,表明已经接受客户机的选择,并且将这一IP地址合法租用信息和其他的配置信息都放到该广播包中,发送给客户机,欢迎它加入网络大家庭;

    在这里插入图片描述
    租约达成以后,还是要广播一下,让大家都知道呢

    ip地址的收回和续租

    如果需要续租的话,需要提前租期的50%,客户机会在租期过去50%的时候,直接向为其提供ip地址的DHCP Server发送DHCP Request消息包,客户机收到该服务器的DHCP ACK消息包之后,会根据包中提供的新的租期,以及其他的已经更新的TCP/IP参数更新自己的配置,这样,ip的租用更新就已经完成了。

    网络管理员不仅能自动分配IP地址,还能帮你自动安装操作系统;

    4.3 预启动执行环境(PXE)

    普通的笔记本一般不会有这种雪球,已经预装好了操作系统。但是数据中心的管理员,可能一下子拿到了几百台空的机器,一台一台装就累死了。

    管理员们不仅希望可以分配好ip地址,还可以自动安装系统,装好系统之后会自动分配IP地址,直接启动最好了。

    安装操作系统的过程,只能插在BIOS启动之后了。因为没安装系统之前,连启动扇区都没有。因而这个过程叫做预启动执行环境(Pre-boot Execution Environment),简称PXE。

    默认的DHCP Server是需要配置的,无非是我们配置IP的时候所需要的IP地址段、子网掩码、网关地址、租期等。如果想使用PXE,则需要配置next-server,指向PXE服务器的地址,另外要配置初始启动文件filename。

    这样PXE客户端启动之后,发送DHCP请求之后,除了能得到一个IP地址,还可以知道PXE服务器在哪里,也可以知道如何从PXE服务器上下载某个文件,去初始化操作系统。

    解析PXE的工作过程

    首先是启动PXE客户端第一步是通过DHCP协议告诉DHCP Server,我啥都没有,DHCP Server便租给它一个ip地址,同时给他PXE服务器的地址、启动文件pexlinux.0;

    其次,PXE客户端知道要去PXE服务器下载这个文件后,就可以初始化机器。于是便开始下载,下载的时候使用的是TFTP协议。所以PXE服务器上,往往还需要有一个TFTP服务器。PXE客户端向TFTP服务器请求下载这个文件,TFTP服务器说好啊,于是就将这个文件传给它;

    然后,PXE客户端收到这个文件后,就开始执行这个文件。这个文件会指示PXE客户端,向TFTP服务器请求计算机的配置信息pxelinux.cfg。TFTP服务器会给PXE客户端一个配置文件,里面会说内核在哪里、initramfs在哪里。PXE客户端会请求这些文件;

    最后,启动Linux内核,一旦启动了操作系统,啥都好办。

    在这里插入图片描述

    总结


    本文是对通信协议综述的总结,共分为四节去介绍:

    1. 为什么学习网络协议?
      通过一个简简单单的下单过程,中间牵扯到这么多的协议,展开介绍;

    2. 网络协议分层的真正含义
      始终想象自己是一个处理网络包的程序:如何拿到网络包,如何根据规则进行处理,如何发出去;
      始终牢记一个原则:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层;

    3. ifconfig命令行的背后;
      IP是地址,有定位功能;MAC是身份证,无定位功能;
      CIDR可以用来判断是不是本地人;
      IP分公有的IP和私有的IP。后面的章节中我会谈到“出国门”,就与这个有关。

    4. DHCP和PXE:ip的由来;
      DHCP协议主要是用来给客户租用IP地址,和房产中介很像,要商谈、签约、续租,广播还不能“抢单”;
      DHCP协议能给客户推荐“装修队”PXE,能够安装操作系统,这个在云计算领域大有用处;

    展开全文
  • 常见网络协议汇总

    千次阅读 多人点赞 2021-08-06 15:03:27
    常用网络协议前言TCP/IP五层网络模型回顾应用层协议DNS协议:HTTP协议HTTPS协议传输层协议UDP协议TCP网络层IP协议ICMP协议数据链路层ARP协议物理层整体的网络传输流程 前言 本篇博客将对基于 TCP/IP的五层网络模型 ...

    前言

    本篇博客将对基于 计算机网络五层模型 中的常见协议做以总结 ,目的通过这些具体的协议更深刻的认识整体网络的传输流程及相关网络原理

    计算机网络五层模型回顾

    在这里插入图片描述

    • 应用层:为用户为用户的应用进程提供网络通信服务
      协议——DNS协议、HTTP协议、HTTPS协议
    • 传输层:负责两台主机之间的数据传输,将数据从发送端传输到接收端
      协议——TCP协议、UDP协议
    • 网络层:负责传输的地址管理和路由选择,在众多复杂的网络环境中确定一条合适的路径
      协议——IP协议
    • 数据链路层:负责设备之间数据帧的传送和识别,将网络层传递的数据报封装成帧,在处于同一个数据数据链路节点的两个设备之间传输
      协议——ARP协议、MTU协议
    • 物理层:负责光电信号的传递方式,实现相邻计算机节点之间比特流的透明传输

    对于五层网络模型基本都是耳熟能详,但是有没有思考过,网络为什么要这样分层呢?

    最直接的回答就是为了简化网络设计的复杂性,通信协议采用分层结构,各层之间既相互独立又相互协调工作,如此以来便达到的高效的目的。如同设计模式中对于设计一个复杂的程序时,尽量使程序各功能之间是解耦合的一样,对于复杂的网络设计,分层设计也是很明智的一种做法。

    网络分层的最本质就是每一层独立的完成一个任务而不必考虑自己任务之外的实现,而因为不同的任务因此就有了每一层所对应的不同设备。(实例到应用就是,物理层只需要关系0和1的光电信号如何传输,而对它所表达的内容毫不关心;再往上数据链路层只需要关心封装好的数据帧如何准确的送到对应的MAC地址的目的主机中,而不必关心数据报的具体内容和具体会通过何种方式光纤还是局域网…同理往上对于所有层)

    应用层协议

    应用层协议主要负责各个程序间的通信,发生网络传输一个数据时,先由应用层对数据按照对应的协议封装,然后交给下一层传输层,当经过一系列网络传输,数据达到接收端时,一层层的分用,最后一层再由应用层分用,最终得到数据。

    DNS协议:

    DNS协议是一个应用层协议,建立在TCP和UDP的基础之上,使用默认端口为53,其默认通过UDP协议通信,但如果报文过大是则会切换成TCP协议。

    域名系统 (DNS) 的作用是将人类可读的域名 (如,www.baidu.com) 转换为机器可读的 IP 地址 (如,192.0.2.44),本质是通过DNS域名和IP地址的对应关系转换,而这种对应关系则保存在DNS服务器中

    域名的解析过程:

    域名的解析工作大体上可以分为两个步骤:第一步客户端向本地DNS服务器发起一个DNS请求报文,报文里携带需要查询的域名,第二步本地DNS服务器向本机回应一个DNS响应报文,报文里携带查询域名所对应的IP地址

    具体流程如下:

    1. 在本地缓存中查询,如果有则返回对应IP,如果没有将请求发给DNS服务器
    2. 当本地DNS服务器接收到查询后,先在服务器管理区域记录中查询,若没有再在服务器本地缓存中查询,如果没有将请求发送到根域名服务器
    3. 根域名服务器负责解析请求的根域部分,然后将包含下一级域名信息的DNS服务地址返回给本地DNS服务器
    4. 本地DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域的DNS服务器地址
    5. 按照上述递归方法逐级接近查询目标,最后在有目标域名的DNS服务器上找到相应的IP地址信息
    6. 本地DNS服务器将最终查询到的IP返回给客户端,让客户端访问对应主机

    HTTP协议

    HTTP协议是一个简单的请求——响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
    同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP进行通信的HTTP的实现程序。

    HTTP是基于TCP协议,且面向连接的。典型的HTTP事务处理有如下的过程:

    1. 客户端与服务器建立连接;
    2. 客户端向服务器提出请求;
    3. 服务器接受请求,并根据请求返回相应的数据作为应答响应;
    4. 客户端与服务器关闭连接。

    HTTP协议报文格式
    HTTP报文由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Respone)构成

    请求由请求行,请求头,请求体组成
    请求行中包含请求方法、路径、版本号,请求头为多个key-value数据,请求正文包含一些请求的数据
    响应由响应行,响应头,响应体组成
    响应行中包含状态码,状态码描述,版本号,响应头为多个key-value数据,响应正文包含一些响应的数据
    在这里插入图片描述
    常见HTTP响应状态码汇总

    200 OK :客户端请求成功

    3XX系列

    301 Moved Permanently :请求的资源以被永久的移动到新URL中,返回的Response中包含一个Location,浏览器会自动重定向到新URL,以后请求都会被新的URL替代
    302 Found :与301类似,但请求的资源只是临时的被移动到新的URL中,下次请求客户端继续使用原URL
    307 Temporary Redirect : 临时重定向,类似于302,使用GET请求重定向

    4XX系列

    400 Bad Request : 客户端请求语法错误,服务器无法理解(在 ajax 请求后台数据时比较常见)
    401 Unauthorized :请求要求用户的身份认证
    403 Forbidden : 服务器理解客户端请求,但是拒绝执行(一般用于用户级别为达到要求等等不支持访问)
    404 Not Found : 服务器无法根据客户端请求找到对应资源
    405 Method Not Allowed : 服务器不支持该方法

    5XX系列

    500 Internal Server Error : 服务器内部错误,无法完成请求
    503 Service Unavailable :由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中

    HTTP协议的特点

    1. 支持服务器/客户端模式
    2. 传输较快速,客户端向服务器发送请求,只需要传输请求方法和路径
    3. 灵活,HTTP允许传输任意类型的数据对象
    4. 无连接,每次连接只能处理一个请求,服务器处理完客户端请求,客户端收到响应后就断开连接
    5. 无状态,协议本身对事务处理没有记忆能力,如果后序连接需要之前发送的信息时就需要重传

    HTTP1.0和HTTP1.1和HTTP2.0的区别:

    HTTP1.0和HTTP1.1的区别:

    1. 长连接:HTTP1.0只支持浏览器与服务器的短连接,即每次请求都要重新建立连接,服务器无法记录每个历史请求,HTTP1.1支持长连接即在一次连接下,浏览器可以向服务器发送多次请求
    2. 增加Host字段:HTTP1.0中认为每个服务器都绑定这唯一一个IP,所有发送的请求头URL中没有host信息,而HTTP1.1在请求和响应中都支持了host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
    3. 缓存:HTTP1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。
    4. 错误提示:HTTP1.0中定义了16个状态码,对错误或警告的提示不够具体。HTTP1.1引入了一个Warning头域,增加对错误或警告信息的描述,并且还新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除

    HTTP1.X和HTTP2.0的区别

    1. 增加二进制格式解析:HTTP1.X解析基于文本,而文本格式本身就具有多样性,很多场景下不方便,而引入二进制后,只有0和1组合,使解析更加方便也增强了健壮性
    2. 多路复用:即每个request都是是用作连接共享机制的,每个request都对应一个id,使一个连接可以有多个请求,再根据id将request归属到不同的服务端请求里
    3. header压缩:HTTP1.X中,每次传输都要写点header头,占用了大量数据,因此HTTP2.0在客户端和服务端各保存了一份header fields表,每次传输时只需传输header的更新信息,将header fields表更新即可实现header传输
    4. 服务端推送:HTTP2.0也添加了server push功能

    HTTPS协议

    HTTPS同样作为应用层协议,可以说它是HTTP的升级版,增加了传输数据的安全性,HTTPS协议是在HTTP的基础上增加了一个SSL外壳,HTTPS运行在SSL上,SSL运行在TCP上,对数据的加密工作就是在SSL上完成的
    在这里插入图片描述

    其保证安全性的做法是通过证书验证和对信息混合加密的方式
    混合加密技术:

    混合加密技术:结合对称加密与非对称加密
    服务端生成私钥,再通过私钥生成公钥,然后将公钥放在证书中颁发给客户端
    使用公钥和私钥以非对称方式加密生成密钥
    客户端接下来的传输数据中,都会用密钥以对称方式对信息加密,再传输给服务端

    在这里插入图片描述

    对于,上述提到的公钥和私钥,我们规定用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开

    所以HTTPS传输数据是用被密钥加密的密文和用公钥加密的私钥来保证数据安全的

    HTTPS加密,只用对称加密可以吗?
    不行!无法保证安全性,因为只用对称加密即只用密钥对数据加密传输的话,如果传输途中,信息被第三方劫持,获取到密钥,那接下来的传输,第三方都可以通过密钥对数据解密从而得到原始数据。

    HTTPS加密,只用非对称加密可以吗?两次呢?
    同样不行,如果只用非对称加密。客户端每次传输数据用公钥加密,服务端再用私钥解密这一方向看似安全,但当服务端发送数据用私钥加密,客户端收到用公钥解密时,第三方劫持到信息,但可能在此之前就获得公钥,因为首次服务端向客户端发送公钥是明文传输的。
    而换个角度如果使用两次非对称加密,即两组公钥,两组私钥,客户端服务端各持一组,理论上可以达到安全,但实际HTTPS并未采用,因为非对称加密耗时十分大

    证书:

    单有混合加密技术,看似已经保证了传输的安全性,实则还是有漏洞,问题就在于服务器根本无法识别发送过来的公钥是否是自己的,如此以来在第三方劫持到数据后,自行再定义一个公钥B,并将公钥B传回给客服端,此时客户端就会利用该公钥B重新加密数据然后发送,此时第三方就可以通过自己的公钥B解密得到原始数据了。

    证书就解决了这一问题,指定颁发的为CA机构,当网站使用HTTPS时,会向CA机构申请一个数字证书,证书中可以存放公钥、数据等信息,由此以来,服务端就可以通过证书来向客户端证明正确的公钥是哪一个,以此保证安全。
    而对于证书,还有一些自己的放篡改机制,防止第三方获取到使用
    在这里插入图片描述

    传输层协议

    传输层的主要功能是为了实现“端口到端口”的通信,以确保一条数据发送到主机上后,能够正确的传递到对应的端口上

    UDP协议

    UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法,但是UDP也有自己的缺陷,一旦进行通信,就不知道对方是否接收到数据了,很有可能会造成传输数据的丢包问题

    在这里插入图片描述
    特点:

    • 无连接:只需要知道目的ip和端口号就可以发送数据,无需建立连接
    • 不可靠:没有一系列机制来应对传输数据时的丢包问题
    • 面向数据报发送:应用层交给UDP什么样的报文,UDP就会发送什么样的,不会进行拆分,合并
    • UDP一次传输的数据大小有限,最大64k

    UDP的传输流程
    在这里插入图片描述
    UDP的适用范围:

    由于UDP不属于连接型协议,所以具有资源消耗小。处理速度优的特点,因此经常使用与视频、音频通话传输中,因为发送的数据较多,偶尔丢包一两个不会产生太大影响

    TCP

    因为上述讲到UDP的传输是不可靠的,经常会导致连接错误、数据丢包问题,针对这些问题规定了另一个传输层协议——TCP协议,TCP是一种面向连接、可靠的、基于字节流的传输层协议

    在这里插入图片描述

    TCP的特点:

    • 面向连接:在传输数据是,要先建立起客户端与服务端的连接,才能进行数据传输
    • 可靠的通信:TCP输出数据中,会基于内部的各种机制保证数据传输到目的端口
    • 基于字节流:TCP传输数据是基于字节传输的,易于对数据的拆分与合并发送
    • TCP的头部比UDP的开销要打,因为要存放更多的信息

    关于TCP内部各种机制,在这里不做过多的介绍,需要博友可以参考之前的一篇博客网络原理基础

    TCP与UDP的区别:

    • UDP是无连接的,TCP是有连接的
    • UDP是不可靠的,TCP是可靠的
    • UDP面向数据报,TCP面向字节流
    • UDP比TCP的传输消耗小,速度更快

    这里分享一张神图,以便于更加形象的理解TCP和UDP的区别
    在这里插入图片描述

    网络层

    网络层是基于数据链路层和传输层之间的第三层协议,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从而向传输层提供最基本的端到端的数据传送服务

    网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。

    IP协议

    IP协议是TCP/IP网络模型中的核心部分,他提供了一种分层的、无关硬件的寻址方式,可以在复杂的路由式网络中传递数据所需的服务

    IP协议可以将多个交换网络连接起来,在源地址和目的地址之间传输数据包,同时它还能提供数据的组装功能,以适应不同网络对数据包大小的要求

    预研知识:

    IP地址:
    IP地址是互联网协议特有的一种地址,它是IP协议提供的一种统一的地址格式,IP地址为互联网的每个网络和每台主机分配了一个逻辑地址,以此来屏蔽物理地址的差异

    IP地址的格式:
    IP地址为32位地址,被分为4个部分,如XXX.XXX.XXX.XXX,IP地址又被划分为两个部分
    网络号:前三部分用于标识网段,保证相互连接的两个网段有不同标识
    主机号:由最后一部分组成,用于标识主机,保证处于同一网段的两台主机有不同的主机号
    通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同4

    MAC地址:
    被称为物理地址,是用来标识网络中每个设备的,MAC地址是设备出厂之后就写死的

    引入IP地址的目的:
    在单个局域网网段中,计算机与计算机之间可以使用数据链路层提供的MAC地址进行通信
    如果在路由式网络中,计算机之间就不能用MAC地址实现通信,主要是因为在路由式网络中,数据只是经过一次简单的利用两个计算机之间的MAC地址建立通信,而是需要进行多次的通信,每次跳转都会体目的主机更近一步,经历都次跳转,最终找到目的主机实现通信,而这个过程中,要知道每次向哪跳转才能更接近目的主机,必须使用一种逻辑化、层次化的寻址方案对网络进行组织,这就是 IP 地址

    IP协议数据报格式这里是引用

    IP协议的工作方式:

    由于网络分为同网段和不同网段,所以会分成两种方式

    • 同网段:如果源地址主机和目的地址主机处于同一网段,则目的IP地址被 ARP协议 解析为MAC地址后,源主机会根据目的MAC地址直接将数据包发送给目的主机
    • 不同网段:
      如果源地址主机和目的地址主机不处于同一网段,则数据包会经历多个过程最终发送给目的主机
      1、网关(一般为路由器)的 IP地址 被 ARP协议 解析为 MAC地址,根据该 MAC地址 源主机会将数据包发送到网关
      2、网关根据数据包中的网段ID找到目标网络,如果找到,将数据包发送给目标网路,如果没有则重复第一步发送到更高一级网关
      3、数据包经过网关发送到正确的网段后,目标IP被 ARP协议 解析为MAC地址,在根据该 MAC地址 将数据包发送给目标地址的主机

    ICMP协议

    ICMP协议又叫控制报文协议,ICMP协议用于在IP 和 路由器之间传递控制消息,描述网络是否通畅、主机是否可达、路由器是否可用等网络状态,ICMP本身并不传输数据,但对于用户间数据的传递起着重要的作用

    作用:
    在数据包从源主机传输到目的主机的过程中,会经历一个或多个路由器,而数据包在经过这些路由器传输过程中,可能会遇到很多问题,最终导致数据包没有成功传递给目的主机。为了了解数据包在传输过程中在哪个环节出了问题,就需要用到ICMP协议,它可以跟踪数据包,并把消息返回给源主机。

    在这里插入图片描述

    数据链路层

    数据链路层是TCP/IP网络模型的第二层,基于物理层和网络层之间,数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标机网络层

    ARP协议

    ARP协议是数据进行网络传输过程中,通过IP地址向MAC地址的转换,解决网络层和物理层衔接问题

    引入ARP协议的目的:
    由于 IP 地址和 MAC 地址定位方式不同,ARP 协议成为数据传输的必备协议。主机发送信息前,必须通过 ARP 协议获取目标 IP 地址对应的 MAC 地址,才能正确地发送数据包。
    在这里插入图片描述
    ARP的工作流程:
    在这里插入图片描述
    在这里插入图片描述
    如图展示的是同一网段下的两台主机,ARP的工作流程

    • 主机A以广播的形式向该网段内的所有主机发送ARP请求,请求中包含了目的主机的IP地址
    • 主机B接收到请求,通过请求中的目的IP地址发现自己是主机A要找的,返回响应,响应包括主机B的 MAC地址

    ARP缓存:
    在请求目标主机的 MAC 地址时,每次获取目标主机 MAC 地址都需要发送一次 ARP 请求,然后根据响应获取到 MAC 地址。

    为了避免重复发送 ARP 请求,每台主机都有一个 ARP 高速缓存。当主机得到 ARP 响应后,将目标主机的 IP 地址和物理地址存入本机 ARP 缓存中,并保留一定时间。

    只要在这个时间范围内,下次请求 MAC 地址时,直接查询 ARP 缓存,而无须再发送 ARP 请求,从而节约了网络资源。

    物理层

    物理层,顾名思义就是用物理手段将两个要通信的电脑连接起来,主要用来传输0、1光电信号,因为这一层过于偏硬件,所以本文不做过多的赘述

    整体的网络传输流程

    经过以上对网络传输层中每一层理解下面我们来看看,当访问一个网页时,到底发生了什么?

    主机A:发送http://www.baidu.com网络数据报

    1. DNS解析:将域名转换成对应IP地址(本机DNS缓存栈开始找—>逐级向上查找,如果根域服务器找不到,表示公网上没有该域名主机)
    2. 找到IP后:通过目的IP找到对应的目的MAC地址
    3. 根据目的IP计算目的主机是否和主机A处于同一网段
    4. 如在同网段:接通过ARP协议解析出对应的目的MAC,跳转到底9步
    5. 如不在同一网段:发送数据报到网关,现在ARP缓存表查找,通过网关IP查找MAC地址,找不到发送查询MAC广播数据报,最终返回网关自己的MAC
    6. 交换机转发:在MAC地址转换表中找到对应MAC交换机接口
    7. 路由器接收:分用数据报
      在这里插入图片描述
    8. 途中的设备:与第7步同样操作如目的IP对应的MAC地址不是当前设备则继续重复该操作继续往更接近目的IP的路由发送
      在这里插入图片描述
    9. 找到目的主机B,主机B的服务器开始接受分用请求,解析,最终组织响应
      在这里插入图片描述
    10. 同上述操作一样,由主机B向主机A发送数据
    11. 最终主机A接受到数据报,经过分用,解析,最终得到响应
    展开全文
  • 网络协议

    千次阅读 2018-01-26 13:29:26
    网络协议层 IP地址:用于在网络中唯一标识主机 1、IP地址分类 1、按照接收者分为四类:单播地址(unicast address)、多播或组播地址(multicast address、广播地址(broadcast address)、任播(anycast) 单...

    网络协议层

    IP地址:用于在网络中唯一标识主机

    1、IP地址分类

    1、按照接收者分为四类:单播地址(unicast address)、多播或组播地址(multicast address、广播地址(broadcast address)、任播(anycast)

    • 单播(unicast)地址:连接接收者是某一个单一的主机
    • 组播(multicast)地址:连接接收方是一组注册过的多个主机,细分为两类

      1. 任意源组播(ASM any-source):接收者主机加入组播组后可接收到任意源发送到该组的数据。为了提高安全性,可以在路由器上配置针对组播源的过滤策略,允许或禁止来自某些组播源的报文通过。最终从接收者角度看,数据是经过筛选的。
      2. 特定源组播(SSM source-specific):接收者主机在加入组播组时,可以指定只接收哪些源的数据。加入组播组后,主机只会收到指定源发送到该组的数据。SSM模型对组地址不再要求全网唯一,只需要每个组播源保持唯一。
    • 广播(broadcast)地址:连接发送给同一网络中的所有主机(无差别的接受)

    • 任播(anycast addresses):任播地址是多个设备共同拥有的,源设备发送数据包给任播地址时,路由器会将其发送给其中的一台设备,通常是距离最近的一个

    2、子网络:网络的进一步细分

    • 子网地址:将网络进一步细分,是将主机编码部分的若干位分配到网络部分作为子网地址

    • 子网掩码(Subnet Masks):用于给边界路由器指出子网编号与主机编号的分界位置(主要实现方法是:通过IP地址的二进制表示与掩码的二进制表示做按位与运算(&)得到的结果为子网络的网络编号)IPv4和IPv6都用”/n”来表示掩码,”n”为掩码的位数

    • 变长子网掩码(VLSM variable-length subnet masks):同一个网络编号使用不同长度的掩码来使得不同的子网络连接不同数量的主机量

    • 子网络的广播地址(Broadcast Address):子网络编号+标识主机编号的位数都为1的组合就是该子网的广播地址

    3、IP路由:主机收到IP数据包,先检查IP地址是否是自己的接口IP或者自己所在网络的组播或广播地址,如果是则直接交给IP包中封装的上层协议,如果不是自己的接口IP,则分为两种情况,如果主机IP层设置作为路由器则转发出去,否则数据包将被丢弃

    • 路由表(Forwarding Table):缓存在本地的转发表

      路由条目包含的信息:

      目的网络ID(Destination):32位(或者128位)目的IP & 掩码的结果,目的网络编码
      掩码(Mask):子网掩码,用于与目的IP做”&”运算得到目的网络的地址
      下一跳(Next-hop):数据包即将到达的下一个路由器
      接口(Interface):将数据包发送到下一跳的出站接口IP地址

    • IP路由行为(IP Forwarding Actions):最长前缀匹配算法
      这里写图片描述
      D^m(j)=d(j),D是目标IP,m(j)为掩码,j为掩码的长度,d(j)为目标网络ID,选择匹配的掩码最长的那一条目路由(j值最大的)

    4、IP分片和重组

    1、IP分片

    • IPv4允许在原发送主机和中间任何经过的路由器处被分片
    • IPv6只允许在原发送方主机处被分片

    2、IP重组

    • IPv4和IPv6都只能在到达目的地处被重组,原因在于:同一IP的碎片可以选择不同的路径到达目的地,这样可以提高传输效率
    • 一个IP数据报的任何一个分片首先到达时,IP层就会启动一个重组计时器(为了防止接收方缓存被用尽),重组计时器的超时时间一般位30s或60s,收到任何一个分片时即使器就开始计时,且收到新的分片也不会被重置,当重组计时器超时数据报还没有被重组完成,则会丢弃掉所有收到的碎片并发送ICMPv4超时消息告知发送方

    2、IPv4:32位(网络编号+主机编号)唯一标识网络中的主机(通常使用十进制表示:128.42.5.24)

    1、IPv4分类地址:按照网络编号与主机编号的长度划分为5类

    • A类地址: 单播地址 网络编号占用前1个字节,主机编号占用后三个字节,且最高位为0(范围为0.0.0.0~127.255.255.255)
    • B类地址: 单播地址 网络编号占用前2个字节,主机编号占用后两个字节,且最高两位为10(范围为128.0.0.0~191.255.255.255)
    • C类地址: 单播地址 网络编号占用前3个字节,主机编号占用后一个字节,且最高三位为110(范围为192.0.0.0~223.255.255.255)
    • D类地址: 组播地址 最高四位为1110,剩下位没有限制(范围为224.0.0.0~239.255.255.255)
    • E类地址: 预留地址,最高四位为1111,剩下位没限制(用于以后的网络维护管理协会使用)

    由于网络发展迅速导致分类地址总单播地址的数量严重不足,因此有了无类域间路由

    2、无类域间路由(CIDR Classless Inter-Domain Routing):是一种ISP分配新地址的方法,通过8~30位可变掩码来区分网络编号部分和主机编号部分,而不单纯像A、B、C那样直接用8,16,24固定掩码长度

    3、聚合路由(Aggregation):将多个分散的IP通过掩码聚合成一个主干IP,用来减少路由表的个数

    4、特殊用途的IPv4地址

    • 用于内网的IP(不会出现在公共网络上的IP) 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
    • 网络主机回环地址 127.0.0.0/8(eg 本地主机回环127.0.0.1)
    • 用于IPv6转换为IPv4的中继地址 192.88.99.0/24(任意源地址)
    • IPv4多播地址240.0.0.0/4
    • 本地广播地址(受限制的)255.255.255.255/32

    5、IPv4数据包格式分为IPv4头部部分和负载数据部分

    IPv4数据报格式
    这里写图片描述

    • DF位位1表示数据报不允许分片,DF位为表示数据报允许分片

    • M位为1表示数据报后面还包含更多片段,M位为0表示数据报后面没有片段了

    • 检查和算法

    • ECN显示拥塞通知标识:Explicit Congestion Notification 发生拥塞的路由器对经过路由器的数据包进行标记以此来通知TCP两端网络拥塞状况,用于上层协议处理网络拥塞

    • DSField差分服务:将数据报分为多个类型,并告诉经过的路由器怎么处理数据报
      这里写图片描述
      这里写图片描述

    • Options拓展头部
      这里写图片描述

    6、IPv4数据包碎片(fragmentation):

    IPv4可以在发送源被碎片化也可以在传送过程中被中间路由器碎片化,碎片只能在目的地重组(允许碎片通过不同的路径到达目的地),且碎片的大小(除了最后一个碎片)必须是8字节的倍数(因为Offset的单位是8字节),且通过IPv4头中的ID号来判断碎片是否为同一个数据报的,通过M位来判断数据报是否还有其他碎片

    规定的所有使用IPv4数据报的链路必须满足最小MTU为576字节


    3、IPv6:用128位标识网络中的主机

    (IPv6通常用16进制表示:5f05:2000:80ad:5800:58:800:2023:1d71,如果中间四位未0可以省略(::102:f001也可以在中间使用Ipv4表示::1.2.240.1 相当与0000:0000:0102:f001)

    1、Ipv6地址按照范围空间分类:

    • 本地节点地址(local-node):只允许在同一台主机上交流使用
    • 本地链路地址(local-link):只允许处于同一个子网络范围内的主机间交流使用 ,前缀 fe80::
    • 本地网路地址(site-local):只用于组播,所有在这个网址的主机交流使用
    • 全球地址(global):全网使用

    大多数主机在同一网络接口上使用多个不同范围类型的地址

    2、IPv6头部格式

    这里写图片描述

    3、IPv6拓展头:采用链式结构

    这里写图片描述
    这里写图片描述
    - Routing 路由拓展选项头:相当于IPv4中的路由拓展(列出要经过的路由IP地址)
    这里写图片描述
    - Fragment 分段拓展选项头:用于IPv6包分段,
    这里写图片描述
    M位设为0表示这是同一数据包的最后一个碎片,M位设为1表示后面还有碎片

    规定的所有使用IPv6数据报的链路必须满足最小MTU为1280字节,IPv6数据报只能在发送源被碎片化不能被中间路由器碎片化,只能在目的地被重组,且碎片大小为8字节的倍数

    • Hop-to-Hop逐跳拓展选项头和Destination目的选项头:这两个选项头都是TLV格式的封装携带者其他类型的选项头

      Hop-to-Hop:每个经过的路由器都必须处理的选项头
      Destination:只有目的IP主机需要处理的选项头
      

      这里写图片描述
      这里写图片描述

    4、IPv6特殊用途地址

    • ::1/128:本机回环地址
    • ::ffff:0:0/96 IPv4映射地址(只用于内部主机,不用在分组头部)
    • 2001::/32 Teredo地址
    • 2002::/16 6to4隧道中继的6to4地址
    • fc00::/7 唯一的本地单播地址,用于构建内部网络,不用于Internet上
    • fe80::/10 链路本地单播地址
    • ff00::/8 IPv6组播地址,仅作为目的IP地址使用

    4、IPv4与IPv6之间相互转化的方法

    1、双栈协议(dual stack):网络节点能同时支持IPv4和IPv6就叫实现了双栈协议

    2、隧道技术(Tunneling):在一个协议中封装另一个协议的放发

    3、IPv4转化为IPv6的方法:

    1、IPv4嵌入IPv6中

    • 根据不同的前缀长度选择不同的嵌入格式,u位必须为0,且后缀用0填充至128位
      这里写图片描述
    • 自动隧道技术:支持这种技术的节点同时支持IPv4和IPv6

    4、通过IPv4网络隧道传输IPv6的技术(用于从IPv4到IPv6的过渡机制)

    1、Teredo隧道技术:将IPv6数据报封装在IPv4/UDP数据包内用于在只支持IPv4网络中传输及通过NAT

    • Teredo客户机是实现了Teredo隧道接口的IPv4/IPv6主机,在经过资格认证之后,接口会被分配一个特定的以2001::/32为前缀的Teredo地址
    • Teredo服务器用于帮助Teredo封装的IPv6数据包建立直接通道以穿过NAT
    • Teredo中继器(relay)用于两端不能直接连接时,两端都将数据发送到中继器,由中继器提供转发(如果大量客户使用中继器,则中继器处理资源会的消耗比较大,应尽量避免使用中继器)
      这里写图片描述
      这里写图片描述

    5、Mobile IP:移动IP,依赖与家乡代理服务器

    1、移动IP的基本模型:双向隧道


    • 移动的手机等设备称为移动节点(MN)
    • 与之通信的主机设备称为通信节点(CN)
    • MN会被赋予一个有家乡网络的网络前缀的IP地址称为家乡地址(HoA)
    • 当移动设备被移动到另一个网络时会被分配一个地址叫做转交地址(CoA)
    • 家乡代理(HA)一种特殊类型的路由器,部署在网络设置中
    • HA的HoA与CoA之间的关联成为MN绑定
      这里写图片描述

    当MN处于自己的家乡网络时,不需要通过HA直接用HoA与外界通讯
    当MN移动到外界连接到一个新网络时,会接受新网络给予分配的CoA地址并向自己的HA发送一个绑定更新信息(绑定CoA与HoA的联系),收到HA的绑定确认信息。绑定后所有的信息通过HA作为路由来转发,并使用一个双向的IPv6分组隧道,这些消息都是通过IPsec的封装安全有效负载来保护,防止伪造绑定更新欺骗

    • 路由优化:为了优化双向隧道带来的路由效率差的问题,允许MN将当前CoA通知相应的CN,允许它们执行无须HA协助的路由

    6、IP地址的分配机构

    这里写图片描述


    7、个人和企业能申请到的IP地址

    1、单个供应商/单个网络/单个地址

    ISP只为用户提供了一个IP地址,用户通常需要拥有家庭局域网(LAN)或无限局域网(WLAN),并使用一台路由器或者主机作为路由器连接到Internet。路由器使用DHCP为家庭用户提供自动的内网地址分配,并执行NAT将内网IP和端口映射为唯一外网IP和端口号
    这里写图片描述

    2、单个供应商/多个网络/多个地址

    对于需要提供Internet服务的企业来说,需要拥有一个固定的外网IP地址来作为Server的地址,需要内部网络来供员工工作,因此需要构建多个子网络,内网NAT路由器中设置了防火墙,过滤不允许进入的入站范围确保企业内部数据的安全性
    这里写图片描述

    3、多个供应商/多个网络/多个地址(多宿主)

    • 采用多宿主计算级网络时,server应该尽可能的采用非聚合IP,以便达到网络负载均衡避免一段网络过于拥塞造成丢包(Internet路由采用最长匹配前缀算法)。但服务商更多的是希望提供聚合IP,因为聚合IP可以减少服务商路由器中路由表的条目数量
      这里写图片描述

    • 多宿主计算机的入站和出站地址控制

      强主机模型(strong host model):发送或接收的单播通信必须与通信传输所经的网络接口相关联,分为强主机发送行为和强主机接收行为
      这里写图片描述

      弱主机模型(weak host model):发送或接收的单播通信不须与通信传输所经的网络接口相关联,分为弱主机发送行为和弱主机接收行为
      这里写图片描述


    8、系统配置:DHCP和自动配置


    9、防火墙

    1、包过滤防火墙:一个互联网路由器,能够丢弃符合(或者不符合)特定条件的数据包。

    这里写图片描述
    - 过滤器或访问控制列表:用来设置规定丢弃(或转发)数据包的标准,简单的过滤器包括网络层报头或传输层报头中各个部分的范围比较(如IP地址或选项等)。通常情况下过滤器会全力阻拦来自外网的恶意流量,但不会限制从内网到外网的流量
    - 无状态过滤器和有状态过滤器:无状态过滤器:单独处理每一个数据报;有状态的过滤器:能够通过关联已经或者即将到来的数据包来推断流或者数据包的信息(数据报分段)
    - ACL(Access Control Lists)访问控制列表:列出了什么类型的 数据包需要被丢弃或转发的基本政策
    - 在配置一个NAT路由器时,网络管理员通常配置一个或多个ACL。每个ACL包含一个规则列表,每个规则通常包含模式匹配条件(pattern-matching criteria,通常允许规则表达网络层或传输层中的包字段值(例如源和目标IP,端口号,方向等))和对应的动作(action)
    这里写图片描述

    2、代理防火墙:一台运行一个或多个应用层网关(ALG)的主机,该主机拥有多个网络接口能够在应用层中继两个连接之间的特定类型的流量(通常不像路由器那样做IP层的转发)

    这里写图片描述

    • 代理防火墙相比包过滤防火墙更安全,但是缺乏灵活性,必须为每个传输层服务设置一个代理,任何要使用新服务必须安装一个相应的代理,并通过该代理来操作发起连接
    • HTTP代理防火墙(HTTP proxy firewallz):web代理,只用于HTTP或HTTPS协议(web服务)
    • SOCKS防火墙:用于web之外的服务,为使用SOCKS代理,应用程序在开发时必须添加SOCKS代理支持功能,同时通过配置应用程序能够获知带的位置继器版本,配置完成,客户端使用SOCKS协议请求代理进行网络连接,也可选择性地进行DNS查找

    10、网络地址转换NAT

    为了解决IPv4地址日渐枯竭的问题,NAT允许在互联网的不同地方重复使用特定的相同IP地址(内网IP)。其主要方法就是重写一个方向传输数据包的源IP地址和另一个方向传输数据包的目的IP地址
    这里写图片描述
    - 提供使用的私有内部IP地址范围:10.0.0.0/8;172.16.0.0/12;192.168.0.0/16

    1、传统的NAT:包括基本NAT和NAPT

    • 基本NAT:只执行IP地址的重写,端口号保持不变,本质上就是将私有地址改写为一个公有地址,(联网的主机数只能小于等于公有IP的个数,基本NAT无助于减少需要使用的IP地址的数量

    • NAPT:使用传输层标识符(TCP和UDP的端口号,ICMP的查询标识符)来确定一个特定的数据包到底和内网中的哪台主机关联(极大的减少了IPv4地址的需求),如果查询不到端口映射的条目则数据包将会被NAT丢弃
      这里写图片描述

    • NAT会话(session):NAT创建的一个内部状态用于记住当前正在处理的一个新连接(状态包括NAT映射)
    • NAT映射(mapping):客户端原端口号和IP与之对应的外部端口号和IP组成的条目

    2、NAT与TCP

    • 当NAT内部客户端发送SYN包时会在NAT生成NAPT条目(记录端口与内部IP和端口号的对应关系),并开启一个连接计时器,如果在连接计时器超时前没有收到ACK,则该NAT会话将被删除
    • 当收到服务器的SYN+ACK回复时,NAT会转发数据报,清楚连接计时器,同时开启一个会话计时器(超时时间按小时计算),每次收到任意一边的数据包时会话计时器时间会被重置,如果会话计时器超时,NAT可能会向内部主机发送一个探测数据包,如果收到内部主机的ACK则重置会话超时器,如没有收到响应(在关闭计时器超时前)或则收到RST数据报,则删除会话
    • 当最后一个FIN的ACK发送后,NAT会主动删除这个连接的NAT会话
    • Peer-to-Peer同步连接:两端同时发送SYN,同步开启连接时,如果外网端先到
      达NAT,外网发送的SYN包将被丢弃,如果在6秒内内网SYN没有到达NAT并开启连接会话,NAT将会发用一个错误信息给外网主机
      这里写图片描述

    3、NAT与UDP

    由于UDP没有连接状态,所以对于NAT会话的删除需要采用另外的计量方法

    • 映射计时器:(要求超时时间为2分钟以上,推荐为5分钟)当内部主机向外部发送数据时会刷新映射计时器,如果计时器超时,则删除该NAT会话
      这里写图片描述
      由于UDP分段时,除了第一个分片有UDP头部,其他分片都不含有UDP头部(UDP头部中包含端口号信息),NAT不能正确处理不含端口号的数据包,因此UDP分片不能被NAT正确处理,应该尽量避免UDP分段。

    4、NAT与ICMP

    ICMP包分为两类:

    • 1.错误信息:当数据包传输途中出现错误路由器会发送一个错误信息数据包给发送者,通过NAT时,通过端口映射该写信息报中的IP

    • 2.查询信息:内网发出查询ICMP时会有一个查询号(QueryID),可以将查询号作为端口号来进行映射

    5、NAT与隧道数据包

    隧道数据包需要NAT转发时,NAT不仅要修改IP头和传输头,还需要修改负载数据中的封装协议的关于端口号的类容(如Teredo隧道包,需修改IPv4头中的IP,UDP头中的端口号,以及负载数据中IPv6头中的IP)

    6、地址和端口转换行为与过滤行为

    这里写图片描述
    这里写图片描述

    7、位于NAT之后的服务器

    • 端口映射(port mapping)又叫端口转发(port forwarding):NAT通过入站数据包的端口号来确定转发的内部主机IP
      位于NAT之后的服务器,需要采用服务器的内部地址和提供服务的端口号来静态配置NAT,然后通过端口转发来提供寻址(端口转发时一个始终存在的静态NAT映射)

    8、NAT回环(loopback)

    允许同处于内部的两台主机之间通过映射的外部IP和端口号交流
    这里写图片描述

    9、SPNAT(Service Provider NAT)/CGN(carrier-grade NAT)/LSN(large-scale NAT)

    服务商提供的NAT,将用户都分配内网IP,减轻IPv4地址的分配空间不足的压力

    10、NAT穿越(NAT traversal):解决内部主机与外部主机的Peer-to-Peer通讯

    • 针孔(Pinholes):隔着NAT的主机建立起来的NAT映射,使得两边特定应用程序(IP+端口号)的数据包能够通过NAT映射发送给对方,这种NAT映射就叫做针孔
    • 打洞技术(Hole Punching):一种让两个隔着NAT的主机通过针孔建立连接交流的技术。其实现主要是:两端客户端通过主动与公网上的已知的集中服务器建立连接来建立自己的NAT映射,这样集中服务器就能够知道两边客户端的NAT公用IP和分配给客户端的端口号信息,然后集中服务器将两边的NAT转换后的IP和端口号发送给对方,让两边自己建立连接(这种连接必须是NAT使用终端无关映射才可以使用)
    • 单边自地址修复UNSAF(UNilateral Self-Address Fixing):应用层连接交流通过NAT时使用的IP地址的更改叫做地址修复,应用程序在没有NAT的协助的情况下修复它的地址的行为叫单边地址修复
      这里写图片描述

    1、STUN(NAT会话穿越工具:适用于一端在内网中,另一端在外网中的Peer-to-Peer通信

    STUNN是一个相对简单的客户机/服务器协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器
    之后的主机之间创建通信
    这里写图片描述

    • STUN协议使用UDP、TCP、或者结合TLS的TCP来作为传输层,TCP和UDP使用的端口号为3478,TCP/TLS端口号为3479
    • STUN协议事务分为两种类型:请求/相应事务、标志事务(标志事务不需要相应)
      这里写图片描述
    • STUN一般封装在UDP负载数据中通过UDP/IPv4传输
    • STUN协议定义了一个简单的keep-alive探测机制,可以保证NAT会话不超时

    2、TURN(NAT中继穿越):适用于两端在不同的NAT之后的Peer-to-Peer通信

    需要一个TURN中继器在NAT两端传递转发数据
    这里写图片描述
    - TURN采用了STUN报文形式,其中报文类型时一个分配请求
    - TURN缺点在于运维TURN中继服务器的投入很大,为了满足传输数据量的需求,中继设备的内存必须足够大,因此在其他直接连接手段都失败的情况下使用

    3、ICE(交互式连接建立)

    是一种使用STUN和TURNd的选择机制,致力于在通信各端之间建立一条最有效的通道:等直连就直连,必要时使用STUN协议,再不行就用TURN
    在实际开发中,如果想构建Peer-to-Peer应用程序,应该选择现有平台的APPI,或者实现了ICE、STUN、TURN的第三方库


    展开全文
  • Linux网络编程——网络协议入门

    万次阅读 多人点赞 2015-03-13 16:19:35
    我们每天使用互联网,你是否想过,它是如何实现的?全世界几十亿台电脑,连接在一起,两两通信。北京的某一块网卡送出信号,深圳的另一块网卡居然就收到了,两者实际上...理解了这些协议,就理解了网络的原理。因为...
  • 2016版GB28181协议中语音广播功能的设备与服务器的网络拓扑结构
  • Linux网络编程——广播

    万次阅读 2015-05-08 18:58:16
    那么在网络中的广播又是什么样子的呢?网络上的广播指:由一台主机向该主机所在子网内(同一个局域网)的所有主机发送数据的方式。如下图的 1 号主机广播给 2、3、4、5 号主机发送数据:实现广播,离不开广播地址,...
  • 防火墙 | 网络协议

    千次阅读 热门讨论 2020-11-08 12:35:35
    网络协议 网络协议的概念 数据在“路”上行走的交通规则 协议:通信双方所共同遵守的规则 网络协议:计算机在网络中实现通信时必须遵守的规则和约定 每个网络中至少要选择一种网络协议。具体选择哪一种网络通信协议...
  • 数据链路层——广播信道CSMA/CD协议

    千次阅读 2017-11-26 12:01:10
    传统以太网如果Alice在给Bob发送消息时,此时...Alice遇到的这种冲突问题在使用广播信道的网络中普遍存在,即要解决如何在多个竞争的用户之间分配单个广播信道的问题。在数据链路层中分出了一个介质访问控制 (Medium
  • ZAB协议:一个简单的全序广播协议

    千次阅读 2016-05-13 09:24:17
    写吞吐量不会随着服务器的加入而得到水平扩展,它的吞吐量受限于广播协议的吞吐量,因此 我们需要一个高吞吐量的广播协议 。(下图为 zookeeper 的逻辑组件) 上图显示了 zookeeper 的逻辑组件;读请求在...
  • 计算机网络协议(三)——UDP、TCP、Socket

    万次阅读 多人点赞 2019-09-04 08:39:53
    底层网络知识详解:最重要的传输层概述一、UDP协议二、TCP协议2.1 TCP的三次握手 概述 这个专栏的计算机网络协议,我是在极客时间上学习 已经有三万多人购买的刘超老师的趣谈网络协议专栏,讲的特别好,像看小说...
  • 网络协议学习

    千次阅读 2018-11-26 15:49:11
    计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的...
  • 计算机网络协议总结

    万次阅读 多人点赞 2019-05-12 16:35:29
    计算机网络协议全面总结 一、OSI七层协议 物理层: 很久很久以前,那时候还没有现在的外星人超级电脑,或者华为的P30。比较调皮的小明想要把自己机器上写好的一些个人游戏心得(如何玩好王者农药)发给小红(校花)...
  • 【Linux网络编程】网络协议入门

    千次阅读 多人点赞 2019-11-10 18:03:45
    网络层06. 传输层07. 应用层08. 附录 01. 前言 我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信。北京的某一块网卡送出信号,深圳的另一块网卡居然就收到了,两者实际...
  • 网络协议的功能

    2019-03-02 21:06:00
    网络协议与应用 网络层的主要功能是: 1)、定义了基于ip协议的逻辑地址 2)、选择数据通过网络的最佳路径 3)、连接不同的媒介类型 ARP协议(地址解析协议广播广播广播:将广播地址作为目的地址...
  • 网络协议详解(主要是IP协议、ICMP协议和ARP协议) 一、网络层的功能 定义了基于IP协议的逻辑地址; 连接不同的媒介类型; 选择数据通过网络的最佳路径。 二、IP数据包格式 第一层 版本:该字段包含的是IP的版本...
  • 网络协议极简总结

    万次阅读 多人点赞 2021-02-03 09:15:49
    一、网络分层 1.1OSI七层模型 由国际标准化组织提出的一种概念模型。该模型将通信系统中的数据流划分为七个层,每个中间层为其上一层提供功能,其自身功能则由其下一层提供。OSI将计算机网络体系结构划分为以下七...
  • 网络分层协议与模型

    千次阅读 多人点赞 2021-09-19 16:45:07
    文章目录网络、通信、协议网络分层模型网络分层与协议、设备一、物理层二、数据链路层MAC地址广播三、网络层IP协议子网掩码ARP协议四、传输层五、会话层六、表示层七、应用层总结 网络、通信、协议 网络网络是由...
  • 网络协议逆向分析

    万次阅读 2017-03-19 21:07:42
    网络协议逆向分析
  • 网络协议复习

    千次阅读 2013-09-29 23:50:27
    不同协议所属的层次如下图: IP  IP地址一开始是分类编址,到了20世纪90年代更换为无分类编址。分类编址时IP地址共有五类ABCDE。对于ABC类地址,IP地址都可以划分为网络标识和主机标识。从一个IP地址中提取网络...
  • 计算机网络(五) 学习计算机网络过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。 —— 数据链路层 —— 文章目录计算机网络(五)—— 数据链路层 ——1. 使用点对点信道的数据链路...
  • 网络编程之UDP广播通信

    千次阅读 2019-06-30 17:03:22
    像ARP地址解析协议和DHCP动态主机设置协议都会使用到UDP中的广播通信方式,这些客户端在启动时,会在第一时间以广播的形式向所在网络子网送报文。 这里给出DHCP协议流程,用于辅助学习,其流程图如下: 想要进行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,938
精华内容 65,575
关键字:

网络广播协议