数据通信基础及报头

为什么现实中不用OSI,而是TCP/IP?

现实中使用的通信模型是TCP/IP四层而不是OSI七层,后者便于理解和学习
1.OSI模型功能和服务定义复杂,很难产品化;
2.很多功能在多个层次重复,功能冗余
3.各层任务分配不均匀;

OSI七层模型

  • 应用层:提供数据的接口,文件、打印、消息、数据库和应用服务。
  • 表示层:表示数据,处理数据、数据加密、压缩、转换。
  • 会话层:维持不同程序之间的数据分离;建立、维持和终止会话。
  • 传输层:端到端的连接,可靠和不可靠的传输,错误纠正。
  • 网络层:提供逻辑寻址,以使路由选择。
  • 数据链路层:将数据包组合为字节,字节组为帧,使用MAC地址提供介质的访问,执行差错检测,但不纠正。
  • 物理层:在设备之间传输的比特流。

两个PC间的远程控制:

  • 传输层:TCP UDP 如果是TELNET那么传输层为TCP协议,
  • 源端口为大于1023的任意,小于49151,目的端口号:23
  • 网络层:已知源目IP地址

数据链路层:

  • 知道源MAC,未知目的MAC,发送数据包前要先查看ARP表,如果有的话直接根据ARP表项转发,如果没有就去发送ARP。

  • 二层也有自己的优先级标识,802.1p,封装在802.1Q里。

  • 物理层:电口网线-比特流,无线-无线电波,光纤-光;

  • 物理层协议:CSMA/CD,CSMA/CA;

数据链路层:


协议:S-HDLC/PPP;E/F/G-802.3,以太网II;
前导符:8字节,接口根据前导符来确定对端的介质信号是否有携带数据(即是数据电流还是探测电流);
目的MAC:6字节;
源MAC:6字节;
长度类型字段:2字节;
如果长度类型字段的值大于1500,表示为类型,这个二层协议就叫做以太网II,该字段表示网络层使用什么协议:(0X0800=ip 0x0806=arp),然后置于数据流的长度就将其定义为固定长度1500,是现在最常见的二层协议;
如果长度类型字段的值小于1500,表示为长度,这个二层协议就叫做802.3,就能表示出这个数据流具体的长度,但是这就无法得知上层的协议,无法继续向后去读取,这时通过新加中间报头LLC,然后在LLC层报头指明上层协议;
FCS校验,防止高低电平的错位;

802.1Q报头:

802.1QTag的长度是4bytes,它位于以太网帧中源MAC地址和长度/类型之间。802.1QTag包含4个字段。
Type:长度为2bytes,表示帧类型,802.1Qtag帧中type字段取固定值0x8100,如果不支持802.1Q的设备收到802.1Q帧,则将其丢弃。
PRI:priority字段,长度为3bit,表示以太网帧的优先级,取值范围是0~7,数值越大,优先级越高。当交换机/路由器发生传输用色时,优先发送优先级高的数据帧。
CFI:Canonical FormatIndicator,长度为1bit,表示MAC地址是否是经典格式。CFI为0说明是经典格式,CFI为1表示为非经典格式。该字段用于区分以太网帧、FDDI帧和令牌环网帧,在以太网帧中,CFI取值为0。
VID:VLAN ID,长度为12bit,取值范围是0~4095,其中0和4095是保留值,不能给用户使用。

网络层:

  • 版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),IPv6的值(0110)。
  • IP包头长度(Header Length):长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为4个字节,即本区域值= IP头部长度(单位为bit)/(84),因此,一个IP包头的长度最长为“1111”,即154=60个字节。IP包头最小长度为20字节。对于标准ipv4报头,这个字段的值肯定是0101
  • 服务类型(Type of Service):长度8比特。这个字段可以拆分成两个部分:Precedence和TOS。TOS目前不太使用。而Precedence则用于QOS(“Quality of Service”,中文名为"服务质量")应用。(TOS字段的详细描述RFC 1340 按位被如下定义 PPP D T R C 0
    PPP:定义包的优先级
       000 普通 (Routine)
       001 优先的 (Priority)
       010 立即的发送 (Immediate)
       011 闪电式的 (Flash)
       100 比闪电还闪电式的 (Flash Override) 视频
       101 CRI/TIC/ECP 语音
       110 网间控制 (Internetwork Control)
       111 网络控制 (Network Control)
    D 时延: 0:普通 1:尽量小
    T 吞吐量: 0:普通 1:尽量大
    R 可靠性: 0:普通 1:尽量大
    M 传输成本: 0:普通 1:尽量小
    0 最后一位被保留,恒定为0

确定数据包的优先级,优先的会优先传递;
正常情况下只会使用前3个bit,那么优先级的范围是0-7;一般情况下普通数据优先级为0,视频数据优先级为4,语音数据优先级为5,协议报文优先级为6;
之后服务类型升级,使得可以更精确去匹配数据包的转发效率,升级后的字段名是DSCP,启用了前面的6个bit;
为了兼容之前的优先级,DSCP里有想要的名称
CS就是DSCP对优先级的兼容;
EF位:DSCP值为46时,就是DSCP的最优的数据包,会把最优的先去转发;
AF:将DSCP的6个BIT分成3段—000 00 0 前3位为一段设值为X,中间2位为一段设值为Y,最后一位恒等于0,最终表示为XY0,另外规定:X取值(1-4),Y取值(1-3),并且X越大表示越优先被传递,Y越大表示越优先被丢弃;
AF:11 12 13 21 22 23 31 32 33 41 42 43

  • IP包总长(Total Length):长度16比特。以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节。
  • 标识符(Identifier):长度16比特。该字段和Flag和Fragment Offest字段联合使用,对大的上层数据包进行分段(fragment)操作。用来唯一标识一个数据包的
  • 标记(Flag):长度为3比特,第一位不使用
    长度第2位是不分段(DF),当DF位被置为1时,路由器将不能对数据包进行分段处理。如果数据包因为不能被分段而不能转发,那么路由器将丢弃数据包并向数据发送方发送错误信息。
    第3位表示更多分段(MF),当路由器对数据包分段时除了最后一个分段的MF位置0 ,其它分段的MF位全设置为1,当接收者收到MF为0的分段停止分段。
    Bit 0: reserved, must be zero Bit 1: (DF) 0 = May Fragment, 1 = Don’t Fragment. Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments.
  • 分段序号(Fragment Offset):长度13比特。该字段对包含分段的上层数据包的IP包赋予序号。由于IP包在网络上传送的时候不一定能按顺序到达,这个字段保证了目标路由器在接受到IP包之后能够还原分段的上层数据包。到某个包含分段的上层数据包的IP包在传送是丢失,则整个一系列包含分段的上层数据包的IP包都会被要求重传。
  • 生存时间(Time to Live):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。IP包每经过一次三层,TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于故障而导致IP包在网络中不停被转发。
  • 协议号:8位
    以下是比较常用的协议号:
        1    ICMP
        2    IGMP
        6    TCP
       17   UDP
       88   EIGRP
       89   OSPF
  • 头部校验(Header Checksum):长度16比特,由于IP包头是变长的,所以提供一个头部校验来保证IP包头中信息的正确性。
  • 源IP地址(Source IP Addresses):长度32比特。标识了这个IP包的源IP地址。
  • 目的IP地址(Destination IP Address):长度32比特。标识了这个IP包的目的IP地址。
  • 可选项(Options):这是一个可变长的字段,长度为0或32bit的整倍数,最大320bit,如果不足则填充到满。该字段由起源设备根据需要改写。可选项目包含以下内容:
    (1)松散源路由(Loose source routing):给出一连串路由器接口的IP 地址。IP 包必须沿着这些IP 地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。
    (2)严格源路由(Strict source routing):给出一连串路由器接口的IP 地 址。IP包必须沿着这些IP地址传送,如果下一跳不在IP 地址表中则表示发生错误。 
    (3)路由记录(Record route):当IP包离开每个路由器的时记录路由器的出站接口的IP 地址。区别于traceroute的是,record可以记录来 回的路径,而traceroute只可以记录单方向的;
    (4)时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。
    填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit(4个字节),所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。

传输层:

TCP报文段首部(20个字节)

  • 源端口号:16bit 一般是大于1023,自己定义的;64911后为扩展端口号
  • 目的端口号:16bit 一般是小于1024,具体要去访问某个服务,就要对应相应的端口号,端口对应服务;
  • 序号:32bit,占4个字节,是本报文段所发送的数据项目组第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为300,而数据大小100字节,则下一个报文段的序号就是400;
  • 确认序号:32bit,占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号;
    因为序号字段有32比特长,可以对4GB的数据进行编号,如许就可包管当序号反复应用时,旧序号的数据早已在收集中消散了;
  • 数据偏移:占4比特,默示数据开端的处所离TCP报文段的肇端处有多远。这实际上就是TCP报文段首部的长度。因为首部长度不固定,是以数据偏移字段是须要的。
  • 保存字段: 6比特,供往后应用,今朝置为0。
  • 6个比特的把握字段
    紧急比特URGent:当URG=1时,注解此报文应尽快传送,而不要按本来的列队次序来传送。与“紧急指针”字段共同应用,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,使接管方可以知道紧急数据共有多长;
    确认比特ACK:只有当ACK=1时,确认序号字段才有意义;
    急迫比特PSH:当PSH=1时,注解恳求远地TCP将本报文段立即传送给其应用层,而不要等全部缓存都填满了之后再向上交付。
    复位比特ReSeT:当RST=1时,注解呈现严重错误,必须断开连接,然后再重建传输连接。复位比特还用来拒绝一个不合法的报文段或拒绝打开一个连接;
    同步比特SYN:在建立连接时应用,当SYN=1而ACK=0时,注解这是一个连接恳求报文段。对方若同意建立连接,在返回的报文段中使SYN=1和ACK=1。SYN=1默示这是一个连接恳求或确认报文,而ACK的值用来区分这是哪一种报文;
    终止比特FINal:用来断开一个连接,当FIN=1时,发送方字节串结束,请求断开传输连接;
  • 窗口字段
     窗口Window:占2字节,默示报文段发送方的接管窗口,单位为字节。此窗口告诉对方,“在未收到我的确认时,你可以发送的数据的字节数至多是此窗口的大小。”

TCP三次握手:

1.  第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
2.  第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
3.      第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

TCP四次分手:

  1. 第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment 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进入LAST_ACK状态;
  4. 第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

TCP连接中发送RST的五种情况:

  1. 客户端尝试与服务器未对外提供服务的端口建立TCP连接,服务器将会直接向客户端发送reset报文。
  2. 客户端和服务器的某一方在交互的过程中发生异常(如程序崩溃等),该方系统将向对端发送TCP reset报文,告之对方释放相关的TCP连接。
  3. 接收端收到TCP报文,但是发现该TCP的报文,并不在其已建立的TCP连接列表内,则其直接向对端发送reset报文。
  4. 在交互的双方中的某一方长期未收到来自对方的确认报文,则其在超出一定的重传次数或时间后,会主动向对端发送reset报文释放该TCP连接。
  5. 有些应用开发者在设计应用系统时,会利用reset报文快速释放已经完成数据交互的TCP连接,以提高业务交互的效率。

UDP报文格式

数据通信基本排错思路

物理层:直连不通,接口,链路
数据链路层:保证两边都有vlan,trunk建立链路才会允许这个vlan。二层不同,双工和速率可能不同
网络层:保证有路由,traceroute看哪里有问题
telnet 能Ping通,说明端口没开,端口占用,或者访问控制等

交换机二层转发原理:

交换机是有一张表,叫做cam表,用来记录MAC和交换机接口以及vlan信息的;
当交换机收到一个数据包,
会先看源MAC地址,看该源MAC 自己CAM表是否存在,
如果不存在,就记录该数据包进入的接口和vlan,源MAC进入CAM表,
如果存在,看接受的接口和原来绑定的接口是否一致:
如果不一致,更改接口,刷新老化时间300S;
如果一致,就直接刷新老化时间;

查看目的MAC,看是不是自己的,如果是自己的就自己解封装处理(三层交换机就做三层处理);
如果不是自己的进行转发处理;
查看CAM表有没有目的MAC:
如果有:
看是否为接收数据包的接口:1.如果是:进行丢弃;2.如果不是:进行转发
如果没有:
对除了该接口以外的相同vlan(相同广播域)的接口进行泛洪;

路由器三层转发原理:

路由器收到包后解封装,目的mac是自己的mac;
那么就继续解封装,查看IP地址,若IP地址为自己,就继续解封装;若不为自己,就检查自己的路由表(FIB)是否有去往这个IP地址网段的路由,若路由表中不存在,则丢弃该报文;若存在,则将该报文发给该路由下一跳,源MAC为自己,目的MAC为下一跳MAC,查看下一跳MAC是否在ARP表中存在,若不存在,作ARP处理,若存在,就直接进行封装转发

ARP工作原理

  1. 首先PC1观察目的IP:192.168.2.1与本机IP:192.168.1.1是否在同一个网段
  2. 发现不在,因此看本机是否设置了网关,如果没有设置网关,PC1直接将ICMP包丢弃,显示目的不可达;发现设置了网关:192.168.1.254,于是执行步骤3
  3. 因为不知道网关的MAC地址,因此发送一个ARP包,获取网关MAC地址:源IP为PC1 IP:192.168.1.1,目的IP为PC1网关IP:192.168.1.254,源MAC为PC1 MAC:11-11-11-11-11-11,目的MAC为广播MAC:ff-ff-ff-ff-ff-ff
  4. 网关回应ARP包:源IP为PC1网关IP:192.168.1.254,目的IP为PC1 IP:192.168.1.1,源MAC为PC1网关MAC:33-33-33-33-33-33,目的MAC为PC1 MAC:11-11-11-11-11-11
  5. PC1得到网关MAC,接着发送ICMP包:源MAC为PC1 MAC:11-11-11-11-11-11,目的MAC为网关MAC:33-33-33-33-33-33,源IP为PC1 IP:192.168.1.1,目的IP为目标IP:192.168.2.1
  6. 路由器收到ICMP包,拆包,查IP-端口对照表,发现IP为192.168.2.0网段的数据,通过E2口发出,于是转发包给端口E2
  7. R1获取目标PC2的MAC,发送一个ARP包:源IP为E2 IP:192.168.2.254,目的IP为PC2 IP:192.168.2.1,源MAC为E2的MAC:44-44-44-44-44-44,目的MAC为广播MAC:ff-ff-ff-ff-ff- ff
  8. PC2发送ARP回应,R1得到目标MAC
  9. R1发送ICMP:源IP为PC1的IP:192.168.1.1,源MAC为E2的MAC:44-44-44-44-44-44,目的IP为PC2的IP:192.168.2.1,目的MAC为PC2的MAC:22-22-22-22-22-22
  10. PC2回应ICMP, 源IP为PC2的IP:192.168.2.1,源MAC为PC2的MAC:22-22-22-22-22-22,目的IP为PC1的IP:192.168.1.1,目的MAC为E2的MAC:44-44-44-44-44-44
  11. 路由器转发ICMP,源IP为PC2的IP:192.168.2.1,源MAC为E1的MAC:33-33-33-33-33-33,目的IP为PC1的IP:192.168.1.1,目的MAC为PC1的MAC:11-11-11-11-11-11
  12. PC1收到回应,完成一次PING 命令

Gratuitous ARP包含的信息:

sender MAC:发送者的MAC地址;sender IP:发送者的IP地址;
target MAC: ff:ff:ff:ff:ff:ff;target Ip:发送者的IP地址;
Gratuitous主要有两个作用:
 1、主动通告自己的MAC地址。一般用于热备份系统中,比如冗余网关,当主设备发生故障,备用设备立即接管主设备,并向广播域发送Gratuitous ARP,通知所有主机网关IP对应的MAC为备份设备的MAC,这样网络中其他设备就会把流量转向备份设备。
2、用于IP冲突检测。当一个主机A的网络接口刚UP的时候,会发送Gratuitous ARP。ARP target IP字段为自己的IP,target MAC字段全0,如果该网段中有其他主机B的IP与之相同,主机B会用自己的MAC填充单播应答ARP sender MAC字段,然后将该ARP单播应答发往主机A。主机A接收任何一个ARP的单播应答则认为产生了IP冲突。值得注意的是:当网络中其他主机收到主机A发出的Gratuitous ARP后,并不会把该ARP中包含的sender ip与sender mac加入本地ARP缓存。

静态路由使用出接口和下一跳对ARP是否开启代理的影响:

1、静态路由使用下一跳,则会封装下一跳接口的MAC地址;
2、静态路由使用出接口。若下一跳有开启ARP代理,则会回应ARP包,使其封装上下一跳接口的MAC地址;若下一跳未开启ARP代理,则下一跳解封装查看到里面的数据包内容target Ip地址不是接收到接口的IP地址则直接丢弃。
因此若静态路由使用出接口,它的下一跳必须开启ARP代理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值