Network

avatar

1.TCP/IP协议模型

TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。

基于TCP/IP的参考模型将协议分成四个层次,它们分别是 链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。

avatar

TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用层,这里面有http,ftp,SMTP,Telnet… 等我们熟悉的协议。第二层则是传输层,著名的TCP和UDP协议就在这个层次第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标第四层是数据链路层,这个层次为待传送的数据加入一个以太网协议头,并进行CRC 校验编码为最后的数据传输做准备。

avatar

上图清楚地表示了 TCP/IP协议中每个层的作用,而TCP/IP协议通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程,数据发送方每层不断地封装首部与尾部添加一些传输的信息,确保能传输到目的地。出栈的过程,数据接收方每层不断地拆除首部与尾部得到最终传输的数据。

TCP协议的特点:

  • 三次握手建立可靠连接
  • 端口号 多路复用
  • 完整性校验
  • 确认机制
  • 应答接收
  • 序列号
  • 丢失检测、乱序重排
  • 窗口机制
  • 流量控制

TCP连接的建立与终止

三次握手


TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。

avatar

  • 第一次握手:
    建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
  • 第二次握手:
    服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
  • 第三次握手:
    客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
  • 为什么要三次握手?
    “为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。”
      具体例子:“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。

      于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

四次挥手


当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次分手”。
avatar

TCP/UDP


TCP/UDP都是是传输层协议,但是两者具有不同的特性,同时也具有不同的应用场景,下面以图表的形式对比分析。

avatar

面向报文

面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。

面向字节流

面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。
关于拥塞控制,流量控制,是TCP的重点,

TCP和UDP协议的一些应用

avatar

什么时候应该使用TCP?
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

什么时候应该使用UDP?
当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。


TCP流量控制


如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。

利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

       设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 400 ”(这里的 rwnd 表示 receiver window) 。

       因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。请注意,TCP的窗口单位是字节,不是报文段。假设每一个报文段为100字节长,而数据报文段序号的初始值设为1。大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。

avatar

          从图中可以看出,B进行了三次流量控制。第一次把窗口减少到 rwnd = 300 ,第二次又减到了 rwnd = 100 ,最后减到 rwnd = 0 ,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。B向A发送的三个报文段都设置了 ACK = 1 ,只有在ACK=1时确认号字段才有意义。
          TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口控测报文段(携1字节的数据),那么收到这个报文段的一方就重新设置持续计时器。

TCP拥塞控制


发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。

发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢开始算法:

当主机开始发送数据时,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是 先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。

通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。</font color=green>而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。

avatar

每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。

另外,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。

为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。慢开始门限ssthresh的用法如下:

  • 当 cwnd < ssthresh 时,使用上述的慢开始算法。

  • 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。

  • 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。拥塞避免


拥塞避免:


  让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

avatar

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送 方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。

这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生 拥塞的路由器有足够时间把队列中积压的分组处理完毕。

如下图,用具体数值说明了上述拥塞控制的过程。现在发送窗口的大小和拥塞窗口一样大

avatar

快重传和快恢复


快重传

快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。

avatar

          接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4。
          显然,接收方不能确认M4,因为M4是收到的失序报文段。根据 可靠传输原理,接收方可以什么都不做,也可以在适当时机发送一次对M2的确认。
          但按照快重传算法的规定,接收方应及时发送对M2的重复确认,这样做可以让 发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了 接收方的四个对M2的确认,其中后三个都是重复确认。
          快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必 继续等待M3设置的重传计时器到期。
          由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。

快恢复

与快重传配合使用的还有快恢复算法,其过程有以下两个要点:

  • 当发送方连续收到三个重复确认,就执行“乘法减小”算法把慢开始门限ssthresh减半。
  • 与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1)而是把cwnd值设置为 慢开始门限ssthresh减半后的数值然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

TCP报文结构:

avatar

2.抓个TCP包看看

avatar
1、Frame:物理层的数据帧概况
2、Ethernet II:数据链路层以太网帧头部信息
3、Internet Protocol Version 4:互联网层IP包头部信息
4、Transmission Control Protocol:传输层的数据段头部信息,此处是TCP

3.各个字段的解释

源端口(Source Port),目标端口(Destination Port) 各2字节

源端口号,标识主机上发起传送的应用程序
目的端口,标识主机上传送要到达的应用程序
这两个值加上I P首部中的源端I P地址和目的端I P地址唯一确定一个TCP连接。

avatar

封包序号(Sequence Number) 4字节

由于 TCP 封包必须要带入 IP 封包当中,所以如果 TCP 数据太大时(大于 IP 封包的容许程度), 就得要进行分段。这个 Sequence Number 就是记录每个封包的序号,可以让收受端重新将 TCP 的数据组合起来。
序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

avatar

确认号(Acknowledge Number) 4字节

为了确认主机端确实有收到我们 client 端所送出的封包数据,我们 client 端当然希望能够收到主机方面的响应
那就是这个 Acknowledge Number 的用途了。
当 client 端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。
这个号是期望收到对方的下一个报文段的数据的第一个字节的序号

avatar

数据偏移(Data Offset)4比特

和IP数据包头部一样,也有个Options字段,长度是不固定的,而为了要确认整个TCP封包大小,就需要这个标志来说明整个封包区段的起始位置。
这个字段指出TCP报文段的数据起始处距离 TCP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。
没有任何选项字段的TCP头部长度为20字节;最多可以有60字节的TCP头部。

avatar

保留字段(Reserved) 占6比特

保留为今后使用,但目前应置为0

avatar


4.状态控制码(Code,Control Flag)

标志位字段(U、A、P、R、S、F):占6比特。

avatar

各字段的含义如下:

紧急URG:

当URG=1,表明紧急指针字段有效。这时发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。
avatar

确认ACK:

当ACK=1时,确认字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。
avatar

推送PSH:

接收方TCP收到PSH=1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
avatar

复位RST:

当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。
avatar

同步SYN:

在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。故SYN置为1,就表示这是一个连接请求和连接接收报文
avatar

终止FIN:

用来释放连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
avatar

滑动窗口(Window)

占2字节
窗口字段用来控制对方发送的数据量,可以告知对方目前本身有的缓冲器容量(Receive Buffer) 还可以接收封包。当 Window=0 时,代表缓冲器已经额满,所以应该要暂停传输数据。
单位为字节。
TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限,这个值是本机期望一次接收的字节数。
avatar

TCP校验和(Checksum)  

占2字节
当数据要由发送端送出前,会进行一个检验的动作,并将该动作的检验值标注在这个字段上;
而接收者收到这个封包之后,会再次的对封包进行验证,并且比对原发送的 Checksum 值是否相符,如果相符就接受,若不符就会假设该封包已经损毁,进而要求对方重新发送此封包!在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

紧急指针(Urgent Pointer)

占2字节
这个字段是在 Code 字段内的 URG = 1 时才会产生作用。可以告知紧急数据所在的位置(紧急指针指出在本报文段中的紧急数据的最后一个字节的序号)

avatar

选项(Options)

TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。
目前此字段仅应用于表示接收端可以接收的最大数据区段容量,若此字段不使用, 表示可以使用任意数据区段的大小。
 这个字段较少使用

TCP首部的主要选项:

最大报文段长度MSS(Maximum Segment Size)是TCP报文段中的数据字段的最大长度。
MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。”

填充字段(Padding):

如同 IP 封包需要有固定的 32bits 表头一样, Options 由于字段为非固定, 所以也需要 Padding 字段来加以补齐才行。

同样也是 32 bits 的整数。

这是为了使整个首部长度是4字节的整数倍。

5.UDP报文结构

avatar

使用wireshak 抓个UDP报文

avatar
各个字段解释

源端口(source Port):源端口号。在需要对方回信时选用。不需要时可用全0。

目的端口(Destination Port):目的端口号。这在终点交付报文时必须要使用到。

长度(Length): UDP用户数据报的长度,其最小值是8(仅有首部)。

校验和(Checksum):检测UDP用户数据报在传输中是否有错。有错就丢弃

时间戳(timestamps):从第一帧开始的时间 距上一帧的时间

数据(Data):用户传输的数据

另外:
UDP数据报需包含一个12字节长的伪首部,它是为了计算检验和而设置的
伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和

6.IP的头部封装:

avatar

IP协议是TCP/IP协议的核心所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情。

  • 在数据链路层中我们一般通过MAC地址来识别不同的节点,而在IP层我们也要有一个类似的地址标识,这就是IP地址。
  • 32位IP地址分为网络位和地址位,这样做可以减少路由器中路由表记录的数目,有了网络地址,就可以限定拥有相同网络地址的终端都在同一个范围内,那么路由表只需要维护一条这个网络地址的方向,就可以找到相应的这些终端了。
  • A类地址 1~126 默认子网掩码 255.0.0.0
  • B类地址 128~191 默认子网掩码 255.255.0.0
  • C类地址 192~223 默认子网掩码 255.255.255.0
  • D类地址 224~239 组播地址
  • E类地址 240~254 科研使用
  • B C两类的私有地址是我们局域网常用的段
    我们常说的C段就是C类地址
  • 私有地址
    • 10.0.0.0~10.255.255.255
    • 172.16.0.0~172.31.255.255
    • 192.168.0.0~192.168.255.255

IP数据包由报头和数据两部分组成。报头的前一部分是固定长度,共20字节。 在报头的固定部分的后面是可选部分——IP选项和填充域。

抓个包看看


IP报文各字段的含义如下

1、版本
占4位,指IP协议的版本。

avatar

2、报头长度
占4位,该字段的单位是32位字(1个32位字长是4字节),因此当IP报头长度为1111时,报头长度就达到最大值60字节。当IP分组的首部长度不是4字节的整数倍是,就需要对填充域加以填充。最常用的报头长度为20位(报头长度值为0101),这时不使用任何选项。

avatar

3、区分服务(服务类型)
占8位,在一般情况下都不使用这个字段。

avatar

4、总长度
指报头和数据之和的长度,单位是字节。总长度字段为16位,故IP数据报的最大长度为65535。
每一种数据 链路层都有其自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU。当IP数据报封装成链路层的帧时,此数据报的总长度不能超过对应MTU的值。若数据报长度超过对于MTU的值,就将数据报进行分片处理,此时数据报首部中的“总长度“字段是指分片后的每一个分片的报头长度和数据长度之和。
avatar

5、标识
占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并赋给标识字段。当数据报进行分片处理后,每个分片的标识值都与原数据报的标识值相同,则在接收端具有相同标识值的分片就能最终正确的重装成为原来的数据报。
avatar
6、标志
占3位,但目前只有两位有意义。
最低位记为MF。MF=1即表示后面”还有分片“的数据包。MF=0表示这已是若干数据包片中的最后一个。
中间位记为DF,意思是”不能分片“。只有当DF=0时才允许分片。
avatar
7、片偏移
占13位。表示每个数据报的分片在原数据报中的相对位置。片偏移以8个字节为偏移单位,即每个分片的长度一定是8字节的整数倍。
avatar
8、生存时间
占8位。表示数据报在网络中的寿命。最初以秒为TTL值为单位,现在以跳数为单位,则目前的最大数据为255.
avatar
9、协议
占8位,指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给那个处理过程。
TCP对应协议字段值6;UDP对应协议字段值17

avatar

10、首部校验和
占16位,该字段只校验数据报的报头,但不包括数据部分。
avatar
11、源地址
占32位

avatar

12、目的地址
占32位

avatar


ICMP(Internet Control Message Protocol)Internet控制报文协议

IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。ICMP不是高层协议,而是IP层的协议。

7.ICMP报文结构

avatar

wireshak内抓ICMP报文

avatar

ICMP报文的各种状态:

目的不可达报文

      类型:3    代码:0至15    检验和
      未使用(全0)
      收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节

源端抑制报文

      类型:4    代码:0    检验和
      未使用(全0)
      收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节

超时报文

      类型:11    代码:0或1    检验和
      未使用(全0)
      收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节

参数问题

      类型:12    代码:0或1    检验和
      指针    未使用(全0)
      收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节

改变路由

      类型:5    代码:0到3    检验和
      目标路由器IP地址
      收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节

回送请求和回答

      类型:8或0    代码:0    检验和
      标识符    序号
      由请求报文发送;由回答报文重复

时间戳请求和回答

      类型:13或14    代码:0    检验和
      标识符    序号
      原始时间戳
      接收时间戳
      发送时间戳

地址掩码请求和回答

      类型:17或18    代码:0    检验和
      标识符    序号
      地址掩码

当传送IP数据包发生错误。比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。

ping

ping可以说是ICMP的最著名的应用,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。

例如:当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下:

avatar

Traceroute

Tracert 命令 路由跟踪 是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。

      Traceroute的原理是非常非常的有意思,它收到到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器IP。

avatar

Best trace : 一款路由追踪可视化软件

avatar

8.数据链路层:

数据包在以太网物理介质上传播之前必须封装头部和尾部信息,封装后的数据包称为数据帧,数据帧中封装的信息决定了数据如何传输。以太网上传输的数据帧有两种格式,选择哪种格式由TCP/IP协议簇中的网络层决定。

帧格式:

avatar

以太网上使用两种标准帧格式。第一种是上世纪80年代提出的DIX v2格式,即Ethernet II格式。第二种是1983年提出的IEEE 802.3格式。

两种格式得区别在于Ethernet 格式中 包含一个Type字段, 标识以太网帧处理完之后将被发送到哪个上层协议进行处理, IEEE 802.3格式种,同样位置是长度字段。

Ethernet II 格式相对使用广泛。

从Type/Length字段值可以区分两种帧类型:当Type字段值小于等于1500(0x05DC)时,帧使用的是IEEE 802.3格式。当Type字段值大于等于1536(0x0600)时,帧使用的是Ethernet II格式

Ethernet II格式

avatar

wireshak抓包看看

avatar

Ethernet II格式种Data字段长度在46-1500B,故以太网数据帧的长度在64(6+6+2+46+4)—–1518(6+6+2+1500+4)字节之间

DMAC:目的MAC地址。字段长度6个字节,标识帧的接收者

SMAC:源MAC地址。字段长度6个字节,标识帧的发送者

Type:类型字段,字段长度2个字节,用于标识数据字段种包含的高层协议。

0x0800 代表 IP协议帧

0x0806 代表ARP协议帧

Data:数据字段是网络层数据,最小长度必须为46字节

FCS:循环冗余校验字段,提供了一种错误检测机制,字段长度为4个字节

IEEE802.3

avatar

Length字段定于了Data字段包含的字节数

LLC(Logical Link Control)逻辑链路控制,由目的服务访问点DSAP(Destination Service Access Point)、源服务访问点SSAP(Source Service Access Point)和Control字段组成。

SNAP(Sub-network Access Protocol)由机构代码(Org Code)和类型Type字段组成。Org Code三个字节都为0。Type字段的含义与Ethernet II中Type字段相同。

  IEEE802.3帧根据DSAP和SSAP字段的取值,又可以分为以下几类:

1:当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware-ETHERNET帧,用来承载NetWare类型的数据

2:当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了ETHERNET_SNAP帧。此帧可以用于传输多种协议。

3:DSAP和SSAP其他的取值均为纯IEEE802.3帧

故可以说4种以太网帧

物理层负责0、1比特流与物理设备电压高低、光的闪灭之间的互换。数据链路层负责将0、1序列划分为数据帧从一个节点传输到临近的另一个节点,这些节点是通过MAC来唯一标识的(MAC,物理地址,终端的网卡MAC地址,全球独一无二的)。

  • 封装成帧: 把网络层数据报加头和尾,封装成帧,帧头中包括源MAC地址目的MAC地址。
  • 透明传输:零比特填充、转义字符。
  • 可靠传输: 在出错率很低的链路上很少用,但是无线链路WLAN会保证可靠传输。
  • 差错检测(CRC):接收者检测错误,如果发现差错,丢弃该帧。
总结

网络设备如何确定以太网数据帧的上层协议?

         以太网帧中包含一个Type字段,表示帧中的数据应该发送到上层哪个协议处理。比如,IP协议对应的Type值为0x0800,ARP协议对应的Type值为0x0806。

终端设备接收到数据帧时,会如何处理?

         主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。如果目的MAC地址是本机MAC地址,则接收该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧在传输过程中是否保持了完整性。如果检查通过,就会剥离帧头和帧尾,然后根据帧头中的Type字段来决定把数据发送到哪个上层协议进行后续处理。
以太网MAC地址

avatar

MAC地址由两部分组成,分别是供应商代码和序列号。其中前24位代表供应商代码,IEEE管理和分配。剩下的24位序列号由厂商自己分配。

   “每一台网络设备都用物理地址来标识自己,MAC地址是全球唯一的。”

9.DNS:

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

-End-

这些内容很多是摘录他人博客的 需要慢慢消化 变为自己的

By___Guy_psycho

⬆︎TOP