一、封装和解封装和一些通信基本概念
1、带宽:
单位时间内从一个节点到达另外一个节点的最大数据量
2、延迟:
数据从一个节点到达另一个节点的时间
3,分层概念
从网络拓扑划分网络:
总线型、环形、星型
接入层:接入终端用户
汇聚层:提供服务,实现网络策略
核心层:提供数据的告诉转发
4.单位换算
网络传输
1kbps = 1000bps
1M = 1000k
1G = 1000G
存储单位
1B = 8bit
这样我们传输的时候,比如下载时,传输过来的8个bit流才会存储位一个计算机的最小单位Byte,所以实际的下载速率应该/8
5.数据的封装
传输层:建立客户端之间的连接 tcp udp
网络层:ip地址
数据链路层:mac地址
封装过程
解封装过程
6.介质
- stp(Shielded Twisted Pair):屏蔽双绞线
- utp(Unshielded Twisted Pair):非屏蔽双绞线
双绞线制作标准/线序
- 半双工和全双工
全双工
在100M的网络传输,实际只使用了1、2、3、6四根线,也就是橙白、橙、绿白、绿这四根线。其中1、2线用于发送数据,3、6线用于接受数据,4、5线为备用线 ,7、8线则为电话线。
在千兆网络中,传输网络数据时,8根网线都要使用,2收2发的方式,即2对芯发送数据,2对芯接收数据,其中网线1、2、3、6芯用来发送数据;网线4、5、7、8芯用来接收数据,千兆网络通常采用标准T568B线序:1-橙白,2-橙,3-绿白,4-蓝,5-蓝白,6-绿,7-棕白,8-棕(这个标准都是一样的)。因此千兆网络必须使用8芯网线。
- 光纤
单模就是因为折射通道窄,所以损耗就小
多模就是因为折射通道宽,所以损耗就大
- 光纤接头
大方头(sc):一般是单模
小方头(lc):一般是多模
大圆头(fc)和小圆头(st):大圆头和小圆头都是在运营商耦合器上面
二、数据链路和mac地址
1.基本概念
局域网:以太网二层封装,两个标准IEEE802、Ethernet2
以太网是局域网组网的唯一标准
广域网:两个标准PPP、HDLC
应用层:协议数据单元(PDU),或者直接叫data
数据:对于下层的每个层级而言,上层反馈给我的信息,下层认为皆是数据。
数据链路层帧格式
校验:crc校验、奇偶校验、海明码
数据链路层传输流程
发送者:
由发送者填充源目mac信息,以及type标识上层协议,crc校验,该数值填充到fcs,借助物理层,转变成二进制比特流从链路中传递。
当数据抵达到设备接口后,接收者的动作:
- 首先看数据的目的mac地址,是否是自己本地的mac,如果不是,则丢弃;如果是,进行下一步;
- 将数据同样进行一次crc校验,比较fcs,如果不同,则丢弃;如果相同,则进行下一步;
- 查看type字段,交由里边标识的上层协议进行处理,数据链路层工作,完成。
注意:这里如果用E2标准,那么type字段里面不能使用私有的协议,需要使用公有的协议
2.帧的内容和区别
2.1. e2帧格式
2.2. ieee802.3帧格式
length:后面的Data的长度
d.sap:目标服务接入点
s.sap:源服务接入点
这里就比e2的type详细,type字段只标识访问目标使用的协议,但是ieee802.3用两个字段来标识目标和源的服务接入协议。
control:这个字段本来是想做一些流控的,但是并没有开发出来这类功能,所以如果是ieee802.3帧,那么就这个字段就是一个恒定值,其实就是无意义
stp的报文
因为stp是公有化协议,所以就没有snap字段,有私有化协议就会有这个扩展字段
如果是公有化就看llc;私有化就看snap
ieee802.3比e2的帧格式要多出好几位,出于对链路传输的考虑,现在的帧格式大部分都是e2
ieee802.3除去data固定长为21B~26B,21B是除去私有化协议snap字段。
e2除去data固定长为18B
两个帧最大都是1518,ieee802.3的MTU的最大值默认为1500B(可修改)
但是这里的问题在于,ieee802.3data段少了8B,也就是说每一帧上层的数据会少8B,一帧流失8B,千万个帧积累下来的数据对于链路的负担就会加重,这就是e2的优点。
3.网络层的数据链路层相关的一些概念
- 分组转发:
数据切割成大小一致的长度。此时传递时网络中每一个数据的长度大小一致相同,提升数据转发效率。
- MTU:最大传输单元
存在每条链路上的概念,如果报文MTU值过大,而链路所能承载的MTU过小,会导致数据分片/丢弃
- e2帧类型值大于等于1536(0x0600),以太网数据帧的长度在64-1518字节之间。
MTU当包头里面的报头太多了,才会变大。
ieee802.3和e2的帧格式
不同的Type字段值可以用来区别这两种帧的类型
当Type字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE 802.3格式。
当Type字段值大于等于1536 (或者十六进制的0x0600)时,帧使用的是Ethernet II格式。
三、网络层的ip报头和ip地址
1.ip报头
英文版
中文版
16b的总长度减去4b首部报头,就能得到所有上层报头加上数据的长度。
分片:
- id、flag、fragmentoffset
id:标识了同组数据
flag:3 bit,标志位。在IP数据报中FLAGS中的分片标志位,位于IP数据报中的第50比特位,分为MF和DF(DF为第49位,第48位暂未使用,无实际意义),MF表示more fragment即还有分片,DF表示don't fragment即没有分片。
mf位:
mf为1时代表后面还有分片;
mf为0的时候代表后面没有分片;
但是这里有个问题,万一mf为0的分片第一个收到了,那么后面都不接收吗?
所以这里还需要有分片的顺序,ip报头用fragmentoffset标识,也就是片偏移
如图
- 协议和生存时间
2.ip地址分类
iana:互联网地址分配管理机制,ipv4地址被分成了五类
四、ip地址分类和VLSM
1.特殊地址:
0.0.0.0 //不可用 0.0.0.0--0.255.255.255
作用1:未指定的地址
作用2:路由层面--全网所有地址
127.0.0.0 //不可用 127.0.0.0 -- 127.255.255.255 环回地址
用于设备内部的tcp/ip的协议栈的测试,其实就是用来测试这个网卡是否支持tcp/ip协议栈
A类地址可以用范围:1.0.0.0 -- 126.255.255.255
2.子网掩码
默认子网掩码
A类:255.0.0.0 8
B类:255.255.0.0 16
C类:255.255.255.0 24
A类地址首位被固定为0,可变为2^7=128,可用减去两个,以此类推B类地址第一位被固定为1第二位被固定为0,C类第一位被固定为1第二位被固定为1第三位被固定为0。
3.网络地址和广播地址
4.vlsm - 可变长子网掩码
5.CIDR
将多个小的子网,用一个相对更大的地址范围进行概括,以此表现表项的优化
CIDR需要能完全覆盖包含所有子网的子网掩码,不能多,也不能少
我们可以算下
我们可以看到22位网络位刚好可以包含10.24.0、10.24.1、10.24.2、10.24.3这四个网段所以这里可以用CIDR去通告路由
但其实很多时候我们并没有怎么完美的汇总,比如我们多出了一个网段
如果我们要汇聚超网,需要多去借一位
这样我们多出来了两条没有存在的子网,10.1.5和10.1.6两个子网,这不满足CIDR
那么我们需要另外一个解决方案
我们可以将这条路由单独出来,通告两条
6.icmp重定向
重定向是由路由器B产生的
7.arp
一开始的arp请求dmac是全ffff,因为无法完整的填充二层抱头(不知道目的ip的mac),得到后就可以填充完整
报文大致内容和报头
接收方接收到arp请求报文如果是自己的ip,询问的是自己的mac地址,那么就会回复,如果不是就会丢弃
arp的老化机制
arp缓存 - 经过arp报文形成 - 动态的arp表项
老化时间:20分钟
华为默认
- arp的老化探测机制:二十分钟中会有3次老化探测 - 单播、单播、广播。
在次期间,如果收到了对方的回应,刷新老化时间。
十分钟发一次单播,十五分钟发一次单播,二十分钟发一次广播。
8.广播域
广播报文所能传播的范围
路由器每个接口都是广播域
交换机所有接口都是同一个广播域(交换机不做任何配置情况下)
广播报文是无法穿越路由器的三层接口(接口下能配置IP)
五、传输层tcp和udp
1.tcp和udp的基本原理和区别
端和端之间通信
端口 = port(逻辑端口)
通常说UDP是基于数据包传输,而TCP是基于流传输的
UDP基于包传输就是发送方会将应用层的数据一次性发送给接收方,但是会标记长度以供应用层识别和使用。
但是udp的传输也会超过接收方的接受长度,所以发送方也会显示最大的udp传输大小例如512字节,进行多次udp调用。
tcp会根据滑动窗口大小和缓冲区接收等,来确保数据流之间的传输,应用层只需要在缓冲区满了或者需要push的时候处理数据,一次tcp的调用会有源源不断的数据流进行传输。
- 粘包问题
但是因为缓冲区的原因会出现粘包问题,udp因为由长度的标识,所以应用层处理数据的时候只需要根据长度字段进行处理,但是tcp并没有,且源源不断的发送过来,所以会出现几个包粘合在一起处理的情况。
所以发送tcp的报头的数据时,应用层需要表示数据长度。
注意:tcp分片给网络层就是正常的1500(20的报头+1480的数据),udp本身没有分片的能力,但是因为网络层并不是专门用来分片的层,所以udp设计传输的时候尽量会减少包的传输大小,以避免网络层进行多余的分片步骤
2.tcp三次握手和四次挥手
大写ACK位置为1,小写ack才会有意义,并且这个是个期望值
- 期望值确认和差错重传
期望值确认,这里分了三段,每段500
- 差错重传机制
如果三个分片数据一次性发过来,但是中间有一个失误了那么所有数据重新传输
- 超时重传机制
重传机制里面有个极端现象,就是这三个分片的报文全部丢失情况,且对面没挂掉,那么对端没收到数据是不会由任何重传报文回来的。
注意:这里重传只会重传无序报文,缓冲区大于无序报文(因为滑动模块),那么只会重传无序报文,直到无序报文变有序报文,才会做一次确认。对有序报文的确认就是已经收到了1500的有序报文。1500-2999的报文是无序报文。
理想状态下的二、三、应用层的报文
ip头固定长20B~60B之间,这里取20B;
tcp头固定长20B;
应用层就只剩1460B;
- MSS - 最大报文段长度,其实就是指这里面的应用层数据的长度,我们上面这个报文的MSS就是1460B,这个在三次握手就会协商好
MTU - 这里是1500B
滑动窗口控制
一般是发送端去适应接收缓存区域,或者是客户端去适应服务器的缓冲区域
因为服务器需要多很多人提供服务,所以缓冲区更小,而客户端的闲置资源较多,缓冲区更大
这里客户端原本发了四个分片的报文,服务端需要四块缓冲区的区域,但是服务端只要闲置的三块,所以和客户端进行了一次协商,客户端后面的报文变成了三段。
- tcp关闭连接(四次挥手)
两边都确认断开就正常断开了
3.UDP报头
注意:这里如果去掉checksum那么报头将会变成6B,每个报文将会少2B
结语
攒着一波更新,很久没更了,求赞。