为什么要学习网络协议

互联网、移动互联网、物联网,都离不开网络协议:

最熟悉的网络协议:HTTP

为了满足各种需求,有各式各样的网络协议(HTTPS、SMTP、MQTT、RTMP等)

网络协议方面的面试题目近年来要求提高了:

TCP和UDP的区别?说一下它们的报文格式?

TCP的流量控制和和拥塞控制?TCP如何实现可靠性传输?

为什么连接是3次握手,关闭是4次挥手?

7层模型与4层模型的区别?每一层的作用是什么?

交换机与路由器的区别?

跨平台的原理(C++)

C++跨平台的原理:使用平台相关的编译器生成对应平台的可执行文件
5f3f40f5b85d85ead8d793614c789b7c.png

网络互连模型(OSI参考模型)

什么是协议?为什么要有协议?

协议就是通用的标准。

如果没有一个国际通用的标准,那么各大公司按照自己的标准来,相互之间的交互就会很麻烦。比如我编写的代码在微软的服务器可以运行,但是要在苹果的服务器运行又需要重新编写…

为了更好地促进互联网络的研究和发展,国际标准化组织 ISO在 1985 年制定了网络互连模型OSI 参考模型(Open System Interconnect Reference Model),具有7层结构。

实际上OSI参考模型(7层)更偏理论,而TCP/IP 协议(4层)在才是在实际中使用的协议,而为了研究和学习计算机网络,又常将之划分为5层。
514d29d6d5f1df79e4b884c1a23a6175.png

请求过程:不管什么协议都是经过下列的包装+解包的过程。
0aa3a16fcde263c90c45128f4a91de9d.png

计算机之间的通信基础

1、需要得知对方的IP地址

2、最终是根据MAC地址(网卡地址),输送数据到网卡,被网卡接收

如果网卡发现数据的目标MAC地址是自己,就会将数据传递给上一层进行处理

如果网卡发现数据的目标MAC地址不是自己,就会将数据丢弃,不会传递给上一层

计算机之间的连接方式

网线直连

需要用交叉线(不是直通线)
144c54767f7626e299598cd495a73622.png

拓展:由此图可以看出ping走的是ICMP协议。

ARP协议的作用:已知 IP地址,通过广播获取 MAC地址。

为什么右边出现3个ARP包,实际上是一次完整的发送请求,接收响应的过程。
6d15767ef538c59c42f7fa3063965d7e.png

364fb1532ac77173b689582c15efdb46.png

拓展:MAC地址为全F即全1,代表广播,所有机器都可以接收。

同轴电缆(Coaxial)

注意:同轴电缆只要有一个地方线断了,整个线路都瘫痪了。

集线器(Hub)

集线器相比同轴电缆唯一的优点就是:哪怕连着集线器的某一个设备中间线路出问题,不会影响到连着集线器的其他设备。

4.网桥(Bridge)

所谓隔绝冲突域是通过:记录设备的MAC地址在左还是在右。

例如,6向7发数据包,

当6发出请求ARP广播时,网桥会记录6的MAC地址在左;

当7发出响应ARP广播时,网桥会记录7的MAC地址在左。

交换机(Switch)

有记忆功能,可以记住发过的。连接的设备必须在同一网段、同一广播域。

若全球所有设备都用交换机连接:

1、他们必然处于同一网段,因此 IP地址可能会不够用

2、即使使用交换机,第一次发送数据包仍然需要ARP广播,耗费大量时间。

3、形成广播风暴,只要有一个设备发送ARP广播,全球设备都能收到

路由器(Router)

网线直连,同轴电缆,集线器,网桥,交换机

  • 连接的设备必须在同一个网段
  • 连接的设备处在同一广播域(发出的ARP广播其他机器都可以收到)

广播风暴:当广播数据充斥网络无法处理,并占用大量网络带宽,导致正常业务不能运行,甚至彻底瘫痪

例如全球的计算机通过网桥,集线器,交换机连接,一个发送广播所有计算机都能收到

路由器的作用

  • 可以在不同网段之间转发数据
  • 隔绝广播域

路由器网关的子网掩码要和连接的主机子网掩码一致,ip地址需要在同一网段

计算机2发送信息给计算机5,需要经过网关,需要输入默认网关,如果不设置网关会跨不了网段

此时计算机2给计算机5发送信息还得需要知道网关的MAC地址,所以第一次发送的信息的时候会发送一次ARP广播来获取网关的MAC地址

此外,Fa1口还需要知道计算机5的MAC地址,所以还需要再进行一次ARP广播
2cthsf.png

路由器左右两端必须不同网段,如果下图右边计算机1为192.168.1.11,发送信息的时候会发现是在同一网段,会直接发送寻找计算机1MAC地址的ARP广播,而不是去寻找路由器Fa0/0端口的MAC地址
2ctfQP.png

MAC地址

  • 每个网卡都有一个6字节(48bit)的MAC地址由组织唯一标识符和网络接口标识符
  • 全球唯一,固化在了网卡的ROM中要,由IEEE802标准制定
  • OUI—组织唯一标识符,前三个字节,标识厂家
  • 后三个字节:网络接口标识符,由厂商自行分配
  • 当48位全为1时,代表广播地址
  • MAC地址操作
  • 查看MAC地址: ipconfig /all
  • 修改MAC地址:更改适配器选项 - 属性 -配置 - 高级 - 网络地址
  • 填写的时候需要把减号去掉
  • 有时候可以通过修改MAC地址蹭网

MAC地址的获取

当不知道对方主机的MAC地址时需要通过ARP广播获取对方MAC地址

获取成功后会缓存IP地址,MAC地址的映射信息,俗称:ARP缓存

通过ARP广播获取的MAC地址属于动态(dynamic)缓存

存储时间默认两分钟,过期就删除

IP地址

IP地址:互联网上的每一个主机都有一个IP地址

最初是IPv4版本,32bit(4字节),2019.11.25,全球的IP地址已经用完

后面退出了IPv6版本,128bit(16字节)
2ct4L8.png

IP地址的组成

IP地址由两部分组成:网络标识(网络ID),主机标识(主机ID)

同一网段的计算机,网络ID相同

通过子网掩码,可以计算出网络ID:子网掩码&IP地址

例如ip是192.168.1.10  子网掩码是255.255.255.0 进行按位与操作

IP地址:1100 0000.1010 1000.0000 0001.0000.1010

&

子网掩码:1111 1111.1111 1111.1111 1111.0000 0000


结果:1100 0000.1010 1000.0000 0001.0000 0000  即192.168.1.0  这就是网段

IP地址+子网掩码才能看出网段是什么,才能看出网络ID和主机ID

例如IP地址:130.168.1.10  子网掩码:255.255.0.0  网段是130.168.0.0 这样就是130.168是网络ID,0.0是主机ID

这样这个网段就可以有256*256-2个ip,减去130.168.0.0和130.168.255.255  全0和全1不能使用

计算机和计算机通信前,会先判断目标主机和自己是否在同一网段

IP地址的分类

A类:默认子网掩码是255.0.0.0  网络ID8位,0开头 例如0111 0000,不能以1开头

B类:默认子网掩码是255.255.0.0   网络ID16位,10开头

C类:默认子网掩码是255.255.255.0  网络ID24位,110开头

D类:以1110开头,多播地址

E类地址:1111开头,保留为今后使用

只有A\B\C类地址才能分配给主机

主机标识全为0,标识主机所在的网段

A类地址:

必须以0开头,后面七位的范围是0-127,网络ID的范围就是0-127  主机ID每个部分都是0-255

0不能用,127作为保留网段,其中127.0.0.1是本地环回地址,代表本机地址,不存在一个网络ID是0,全1也不行

第一部分的取值范围是1-126 第2,3,4部分的取值范围是255

每个A类网络能容纳的最大主机数是:256256256-2-2=2的24次-2  其中xxx.0.0.0和xxx.255.255.255不能使用

B类地址:

必须是10开头,第一部分的取值范围是128-191,第二部分的取值范围是0-255 网络ID的取值范围是128.0-191.255

主机ID:第三四部分的取值范围是0-255

每个B类网络能容纳的最大主机数是:256*256-2

C类地址:

网络ID:第一部分的取值范围是192-223  第二三部分的取值范围是0-255

主机ID:第4部分的取值范围是0-255 每个C类网络能容纳的最大主机数是256-2

D,E类地址

D类地址:没有子网掩码,用于多播地址

第一部分取值范围是:224-239

E类地址:保留为今后使用

第一部分的取值范围是:

子网掩码的CIDR表示方法

192.168.1.1100/24  代表子网掩码有24个1  也就是255.255.255.0

123.210.100.200/16  代表子网掩码有16个1,也就是255.255.0.0

为什么要进行子网划分?

如果需要在200台主机在同一个网段内,可以分配一个C类网段,比如192.168.1.0/24

共254个可用ip,多出54个空闲,不算浪费资源

如果需要让500台计算机在同一个网段,可以分配一个B类网段,比如191.100.0.0/16

一共65534个可用IP地址 191.100.0.1-191.100.255.254 

多出65034个空闲的IP地址,属于极大的浪费资源

子网划分

子网划分:借用主机位作子网位,划分出多个子网

可分为等长子网划分和变长子网划分

等长子网划分:一个网段分成多个子网,每个子网的可用IP地址数量是一样的

变长子网划分:每个子网的可用ip地址数可用是不一样的

例如191.100.0.0/16 划分成好几个相同的子网段
2ctIeS.png

如上图,子网掩码从24个1变成25个1   本来有一个C类网段,192.168.0.0/24  这时候网络ID变成了25位,主机位是7位

这样就产生出了两个新的子网段,192.168.0.0/25  和192.168.0.128/25

A子网:192.168.0.0/25 子网掩码:255.255.255.128

192.168.0.1-192.168.0.126

B子网:192.168.0.128/25 子网掩码:255.255.255.128

192.168.0.129-192.168.0.254

超网&静态路由

Q:192.168.0.10/24和192.168.10.10/16两台设备之间连接能正常通信吗

A:网段不同,前者是192.168.0.0后者是192.168.10.0,不能正常通信
2gLXbn.png

计算机0和计算机1通信时,计算机0只知道计算机1的ip地址,不知道计算机1的子网掩码,所以计算机0如果要发消息给计算机1时,是使用计算机0的子网掩码和计算机1的IP进行按位与操作

通信需要双方都可以给对方发消息,虽然计算机1可以给计算机0发消息,但是计算机0没法给计算机1发消息

超网

超网:跟子网反过来,他是将多个连续的网段合并成一个更大的网段

需求:原本200台计算机使用192.168.0.0/24网段,现在希望增加200台设备到同一个网段

合并网段的条件:必须是连续的,比如192.168.0.0和192.168.1.0反之,192.168.0.0和192.168.2.0不能合并

Q:192.168.1.0和192.168.2.0可以通过向左移动1位子网掩码进行合并吗?

A:不可以,合并网段有一个规律
2gLxU0.png

规律:如果第一个网段的网络号能被n整除,那么由他开始连续的n个网段,能通过左移k位子网掩码进行合并

比如第一个网段的网络号以二进制00结尾,那么由他开始的连续四个网段,可以通过左移2位子网掩码进行合并

合并两个网段

例如200台在192.168.0.0/24网段,200台在192.168.1.0/24   合并192.168.0.0/24,和192.168.1.0/24为一个网段 :192.168.0.0/23(子网掩码向左移动一位)
2gLvEq.png

子网掩码往右是划分子网,往左是划分超网,大概都是两倍的关系

思考:192.168.0.255/23这个IP地址可以给计算机使用吗

解:子网掩码23位,主机位有9位,如果只是255,不是全为1,而是011111111

意味着这不是广播地址,如果是192.168.1.255/23这个IP则不能给计算机使用,这个是当前网段的广播IP地址

合并4个网段

2gLLuj.png

将192.168.0.0/24 192.168.0.1/24 192.168.0.2/24 192.168.0.3/24合并为192.168.0.0/22网段

判断一个网段是子网还是超网

  1. 首先判断网段的类型,是A类还是B类还是C类
  2. 看子网掩码是在默认之网掩码变多还是变少
  3. 比如c类网段,子网掩码默认24位,如果子网掩码小于24,则是超网,大于24是子网

路由

在不同网段之间转发数据需要路由器支持

默认情况下,路由器只知道跟他直连的网段,非直连的网段需要通过静态路由,动态路由告诉他

静态路由:管理员手动添加路由信息,适用于小规模网络

动态路由:路由器通过路由选择协议(比如RIP,OSPF)自动获取路由器信息,适用于大规模网络
2gLODs.png

四个角一共四个不同的网段,路由器0两个网关都对应两个网段,192.168.1.1/24和192.168.1.10/24在同一网段

如果路由器0要给路由器1发信息,路由器1是路由器0的下一跳,并且添加路由的时候网络和掩码填写需要通信的机子的网段

比如计算机0要给计算机2发信息,添加静态路由时的网络和掩码填写193.168.2.0和255.255.255.0

并且路由器0和路由器1的两个Serial2/0口必须配置并且在同一网段

局域网&NAT

网络,互联网,因特网

网络:将多台计算机连接起来

互联网:用路由器把许多网络连接起来

全世界最大的互联网:因特网

ISP:因特网服务提供商,比如移动,电信,联通,铁通等

网络分类

按照网络的范围可以分为局域网,城域网,广域网

局域网(LAN):一般是范围几百米到十几公里内的计算机构成的网络,使用最广泛的网网络技术叫以太网

在电脑,手机上的WLAN—无限局域网

城域网(MAN)数十公里到数百公里

广域网(WAN),可以覆盖一个国家,通常需要租用ISP的线路

常见的几种接口

FastEthernet:快速以太网接口(100M)

GigabitEthernet:千兆以太网接口

Serial:串口

上网方式 — 电话线入户

2RHXEq.png

广域网口WAN连接猫   电脑连接LAN口  电话线扣连接电话线

这就是平时说的:ADSL电话拨号上网

非对称数字用户线路,提供上下行不对称的传输宽带

猫(Moden):调制解调器,进行数字信号和模拟信号的转换

电话线传播的是模拟信号,计算机中是数字信号

上网方式  — 光纤入户

2RHqDs.png

WAN连接光猫   LAN连接计算机

光猫(Optical Modem) 光调制解调器,进行光信号和数字信号的转换

上网方式  — 网线入户

2RHbuj.png

家用无限路由器的逻辑结构

2RH7vQ.png

公网IP,私网IP

IP地址分为:公网IP,私网IP

公网IP:Internet上的路由器只有到达公网的路由表,没有到达私网的路由表

私网IP:主要用于局域网,下面是保留的私网网段

A类:10.0.0.0/8 1个A类网络

B类:172.16.0.0/16 - 172.31.0.0/16  16个B类网络

C类: 192.168.0.0/24 - 192.168.255.0/24  256个C类网络

NAT技术(Network Address Translation)

局域网内不论哪一台设备,发请求道到外网,要经过路由器,路由器会经过NAT转换,把IP地址换成公网IP地址
2RHLbn.png

如上内网中是192.168.1.10的机子经过NAT转换假设变成了201.0.0.11,然后之后发送请求给200.0.0.10是以201.0.0.11的地址发送,返回也一样

NAT的特点

  1. 可以节约公网IP资源
  2. 会隐藏内部真实IP

NAT的分类

静态转换:手动配置NAT映射表 (设置某个私网IP映射成某个公网ip) 一对一转换

动态转换:定义外部地址池,动态随机转换,一对一转换

PAT(Port Address Translation)

多对一转换,最大程度节约公网IP资源

采用端口多路复用,通过端口号表示不同的数据流

网络分层

TCP/IP协议模型

分为应用层,运输层,网际层,网络接口层

学习上把网络接口层分出物理层和数据链路层

image-20210719080025060

物理层

物理层定义了接口标准,线缆标准,传输速率,传输方式等

模拟信号

连续的信号,适合长距离传输

抗干扰能力差,收到干扰时波形变形很难纠正

数字信号

离散的信号,不适合长距离传输

抗干扰能力强,收到干扰波形失真可以修复

image-20210719082844800

网线不能超过一百米,所以广域网使用电话线/光纤来进行远距离传输

信道

信道—信息传输的通道,一条传输介质(比如网线)上可以有很多信道

从右往左和从左往右是两条不同的信道

单工通信:信号只能往一个方向传输,任何时候都不能改变信号的传输方向

比如:无线电广播,有线电视广播

半双工通信:信号可以双向传输,必须交替进行,同一时间只能一个方向

比如对讲机

全双工通信:信号可以同时双向传输

比如手机(打电话,听说同时进行)

数据链路层

链路:从一个节点到相邻节点的一段物理线路,中间没有其他交换节点(比如交换机)

image-20210719083517909

路由器0和路由器1之间是一个链路 路由器1和路由器2之间也是个链路

交换机0和计算机1之间也是一个链路 路由器2和交换机0也是个链路

计算机0和路由器0之间是一个链路,集线器相当于网线

数据链路:在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输

不同类型的数据链路,所用的通信协议可能是不同的

广播信道:CSMA/CD协议(比如同轴电缆,集线器等组成的网络)

点对点信道:PPP协议(比如两个路由器之间的信道)

数据链路层的三个基本问题:封装成帧,透明传输,差错校验

封装成帧

image-20210719084048916

把网络层的数据表进行封装,数据包变成帧的数据部分

最大传输单元MTU

每一种数据链路层协议都规定了所能传送帧的数据长度上线

以太网的MTU为1500个字节

透明传输

image-20210719084516727

image-20210719084537868

如果原始数据中包含帧开始符合帧结束符,要先进行转义

差错检验

image-20210719085039223

FCS根据数据部分和链路层首部计算出一个值,会和FCS进行比较

如果计算出的数值和FCS不一样,数据会被丢弃

CSMA/CD协议

载波侦听多路访问/冲突检测

使用了CSMA/CD协议的网络可以称为以太网,传输的是以太网帧

以太网帧有Ethernet V2标准,IEEE的802.3标准,主要是Ethernet V2标准

为了能够检测正在发送的帧是否产生了冲突,以太网的帧至少要64字节

用交换机组件的网络,已经支持全双工通信,不需要使用CSMA/CD,传输的帧依然是以太网帧

Ethernet V2帧的格式

image-20210719091821164

image-20210719093358123

PPP协议

image-20210719095209850

网卡

工作在数据链路层和物理层

image-20210719095418076

网卡接受到一个帧,首先进行差错校验,如果校验通过则接收,否则丢弃

wireshark抓到的帧没有FCS,因为他抓到的是差错校验的帧/FCS会直接丢弃

网络层

网络层数据包(IP数据包,Packet)由首部,数据2部分组成

image-20210719102930642

image-20210721131746747

image-20210721133032811

image-20210721134104889

image-20210721134300157

首部检验和

把首部的数据根据一定的算法算出来的值给首部检验和

image-20210721144812677

传输层

两个协议:TCP和UDP协议

image-20210721145341650

UDP-数据格式U

image-20210721150910873

image-20210721151025439

image-20210721152244539

TCP请求

image-20210802183353122

首部长度20-60

可靠传输

流量控制

拥塞控制