【HCIA】03.常用协议(TCP UDP)

传输层协议

TCP:一种面向连接的,可靠的传输层通信协议,由IETF的RFC/93定义。

UDP:一种简单的无连接的传输层协议,由IETF的RFC 768定义。

TCP报文

6d242935ab67f556923f7bfed4b4238c.png

3f8d0739dad90a0df759057b8eff5615.png

  • TCP头部默认20Byte(160个bit)
  • 接口一次只能发送1500个字节,MTU=1500
  • TCP头部最长是60个Byte

报文内容简介

    • Source port(16):源端口
    • Destination port(16):目的端口
    • Sequence number(32):序列号,发出来的数据的编号
    • Acknowledgement number(32):确认号,收到了第几个报文(表示下一个报文应该从哪个序列号开始发送。)
    • Header length(4):头部长度,解封装时可以根据头部长度来确定TCP头部的范围是从哪里到的哪里
    • Reserved(6):保留字段,没有开发,没有什么用
    • Options:补充功能,可以添加其他的功能(认证,密码),0-40个Byte
    • Window(16):滑动窗口,用来做流量控制,管理当前传输量
    • Checksum(16):校验和,看看数据和之前的是否一样
    • Urgent(16):紧急指针位,接到这个时,需要尽快送到上层
    • Control bits(6):通常叫做flag位,标志位。可以容纳6个bit,里面的值代表开关,1则代表开启;
      • ACK:确认序号有效标识,只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。确认连接
      • RST:重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因)然后再重新建立连接。重新连接
      • SYN:同步序号标识,用来发起一个连接。SYN=1表示这是一个连接请求或连接接受请求。建立连接
      • FIN:发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的数据已经发送完毕。拆除连接
      • PSH:标识应该尽快将这个报文段交给应用层。
      • URG:紧急指针有效表示。它告诉系统此报文段中有紧急数据,应尽快传送

TCP的建立-三次握手

  • 任何基于TCP的应用,在发送数据之前,都需要由TCP进行“三次握手”建立连接。

9bde83c5fb3891dc2651949995f652b4.png

  • TCP连接建立的详细过程如下:
    • 由TCP连接发起方(图中PC1),发送第一个SYN位置1的TCP报文。初始序列号a为一个随机生成的数字,因为没收到过来自PC2的任何报文,所以确认序列号为0 ;
    • 接收方(图中PC2)接收到合法的SYN报文之后,回复一个SYN和ACK置1的TCP报文。初始序列号b为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为a+1;
    • PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认序列号为b+1。PC2收到之后,TCP双向连接建立。

3b1cda22b74f5853089edcf2cd6b6ffc.png


TCP的序列号与确认序列号

  • TCP使用序列号和确认序列号字段实现数据的可靠和有序传输。

f34423098df60156f7d5b6a46880d259.png

96e40a53fbb5871f5ee91b4a7bdfe4f5.png

  • 序列号 对面的确认号是多少,自己的序列号就是多少(如果通过计算来得到自己的序列号,那么就跟上次自己的序列号加上报文长度;注意:如果在三次握手以及四次挥手中,出现syn或者fin也要+1)
  • 确认号 根据对面的包做确定(对面的序列号+【如果有syn或者fin则+1】 +报文长度)

假设PC1要给PC2发送一段数据,传输过程如下:

  1. PC1将全部待TCP发送的数据按照字节为单位编上号。假设第一个字节的编号为“a+1”,第二个字节的序号为“a+2”,依次类推。
  2. PC1会把每一段数据的第一个字节的编号作为序列号(Sequence  number),然后将TCP报文发送出去。
  3. PC2在收到PC1发送来的TCP报文后,需要给予确认同时请求下一段数据,如何确定下一段数据呢?序列号( a+1 )+载荷长度=下一段数据的第一个字节的序号(a+1+12)
  4. PC1在收到PC2发送的TCP报文之后,发现确认序列号为“a+1+12” ,说明“a+1”到“a+12”这一段的数据已经被接受,需要从“a+1+12”开始发送。
    为了提升发送效率,也可以一次性发送多段数据,由接收方统一确认。

TCP的窗口滑动机制

  • TCP通过滑动窗口机制来控制数据的传输速率
  • MSS就是一个窗口可以存储多少字节,默认是1460字节
  • 如果第二个窗口传输错误,那么从第二窗口往后都需要重新传输
  • 看对面剩几个空格,就发送几个空格

7482e9a8e7c4fba14182b65991dee505.png

  1. 在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。
  2. 连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。
  3. 接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。
  4. 接收方根据自身的缓存空间大小通告当前的可以接受的数据大小( Window )。
  5. 发送方根据接收方当前的Window大小发送相应数量的数据。

5f239af3ca0ebe2cffc6f1ce5284bb1c.png


TCP的关闭-“四次挥手”

  • 当数据传输完成,TCP需要通过“四次挥手”机制断开TCP连接,释放系统资源。

23089d5146c35a2c551a1fb1c5f12a75.png

TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。如图所示:

  1. 由PC1发出一个FIN字段置”1 ”的不带数据的TCP段;
  2. PC2收到PC1发来的FIN置位的TCP报文后,会回复一个ACK置位的TCP报文。
  3. 若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP报文去关闭连接。
  4. PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。

UDP报文

  • 无连接的服务
  • 一般视频语音聊天需要使用UDP
  • UDP报文头部:
    • Source Port:源端口,标识哪个应用程序发送。长度为16比特。
    • Destination Port:目的端口,标识哪个应用程序接收。长度为16比特。
    • Length:该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535字节(包括8字节的报头,和65527字节的数据)。
    • Checksum:覆盖UDP头部和UDP数据的校验和,长度为16比特。

dbc0112cab8cc7800c70841610b58a8d.png

地址解析协议(ARP)

  • 已知IP求MAC的过程
  • ARP基于数据链路层工作
  • Address Resolution Protocol 地址解析协议
  • 华为查看mac表: arp -a

7885aab8e2be2f78eb5eb26b35045cc7.png

ARP(Address Resolution Protocol,地址解析协议)是根据IP地址获取数据链路层地址的一个TCP/IP协议。

ARP是IPv4中必不可少的一种协议,它的主要功能是:

将IP地址解析为MAC地址;

维护IP地址与MAC地址的映射关系的缓存,即ARP表项;

实现网段内重复IP地址的检测。(免费ARP)

ARP的工作原理 (1)

3e89e6b1e3748ef893b18ae1d9b43385.png

网络设备一般都有一个ARP缓存(ARP Cache)。ARP缓存用来存放IP地址和MAC地址的关联信息。

在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的ARP表项,则直接采用该表项中的MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应信息,则通过发送ARP Request报文来获得它。

学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内(缺省:180s),设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表项会被自动删除。

如果目标设备位于其他网络,则源设备会在ARP缓存表中查找网关的MAC地址。然后将数据发送给网关。最后网关再把数据转发给目的设备。

ARP的工作原理 (2)

c85b125063f906011cbc860a2d3eef49.png

主机1的ARP缓存表中不存在主机2的MAC地址,所以主机1会发送ARP Request来获取目的MAC地址。

ARP Request报文封装在以太帧里。帧头中的源MAC地址为发送端主机1的MAC地址。此时,由于主机1不知道主机2的MAC地址,所以目的MAC地址为广播地址FF-FF-FF-FF-FF-FF。

ARP Request报文中包含发送端MAC地址、发送端IP地址、目的端MAC地址、目的端IP地址,其中目的端MAC地址的值为0。ARP Request报文会在整个网络上传播,该网络中所有主机包括网关都会接收到此ARP Request报文。

ARP的工作原理 (3)

6293800f4063e37e123d8f01e2e7ae6f.png

所有的主机接收到该ARP Request报文后,都会检查它的目的端IP地址字段与自身的IP地址是否匹配。如果不匹配,则该主机将不会响应该ARP Request报文。如果匹配,则该主机会将ARP请求报文中的发送端MAC地址和发送端IP地址信息记录到自己的ARP缓存表中,然后通过ARP Reply报文进行响应。

ARP的工作原理 (4)

235c396097b27cc84b0cde2b8a768541.png

主机2会向主机1回应ARP Reply报文。

ARP Reply报文中的发送端IP地址是主机2自己的IP地址,目的端IP地址是主机1的IP地址,目的端MAC地址是主机1的MAC地址,发送端MAC地址是自己的MAC地址,同时操作类型被设置为Reply。

ARP Reply报文通过单播传送。

ARP的工作原理 (5)

774dac461c6b0f103b051326e0cf65d2.png

主机1收到ARP Reply以后,会检查ARP报文中目的端IP地址字段与自身的IP地址是否匹配。如果匹配,ARP报文中的发送端MAC地址和发送端IP地址会被记录到主机1的ARP缓存表中。

ICMP

  • 因特网控制消息协议
  • ICMP用来传递差错、控制、查询等信息
  • 它要负责告诉源主机为什么网络断了以及为什么网络不通
  • 基于IP工作,ICMP前面封装的是IP,IP前面封装的是以太
  • ICMP是TCP/IP协议簇的核心协议之一,它用于在IP网络设备之间发送控制报文,传递差错、控制、查询等信息
  • 由Type与Code构成
  • ping的type与code发送80,回应00

4133e54b520e690f18905bb081df6fc5.png

ICMP差错检测

  • ICMP Echo Request和ICMP Echo Reply分别用来查询和响应某些消息,进行差错检测。
  • ICMP Echo消息常用于诊断源和目的之间的网络连通性,还可以提供其他信息,如报文往返时间等。
  • 会发送三次不同的端口号

e72225ac7254ef486a17468302c69eab.png

ICMP错误报告

  • 当网络设备无法访问目标时,会自动发送ICMP目的不可达报文到发送端设备。

9e9837f3b5dcd06b6b3cfc6c0d3e64c0.png

ICMP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因。比如,如果网络中发生了环路,导致报文在网络中循环,最终TTL超时,这种情况下网络设备会发送TTL超时消息给发送端设备。又比如如果目的不可达,则中间的网络设备会发送目的不可达消息给发送端设备。目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息;如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息。

ICMP应用-Ping

9282feccf13b172f16d63a6b4c912ca9.png

81dde82961c67b0931729abbc559fd4e.png

ICMP的一个典型应用是Ping。Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数、等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。
Ping常用的配置参数说明如下:

  1. -a source-ip-address指定发送ICMP ECHO-REQUEST报文的源IP地址。如果不指定源IP地址,将采用出接口的IP地址作为ICMP ECHO-REQUEST报文发送的源地址。
  2. -c count指定发送ICMP ECHO-REQUEST报文次数。缺省情况下发送5个ICMP ECHO-REQUEST报文。
  3. -h ttl-value指定TTL的值。缺省值是255。
  4. -t timeout指定发送完ICMP ECHO-REQUEST后,等待ICMP ECHO-REPLY的超时时间。

Tracert

  • 查看网络在哪个节点断开,或者查看网络走哪条路径
  • 由ICMP的TTL超时消息和UDP的端口不可达报文合成
  • Tracert显示数据包在网络传输过程中所经过的每一跳。

Tracerty应用-Tracert

ea67e3557ac1818a33fd13b55277c27b.png

ICMP的另一个典型应用是Tracert。Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。该报文到达第一个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。

•Tracert常用的配置参数说明如下:

1.-a source-ip-address指定tracert报文的源地址。

2.-f first-ttl指定初始TTL。缺省值是1。

3.-m max-ttl指定最大TTL。缺省值是30。

4.-name使能显示每一跳的主机名。

5.-p port指定目的主机的UDP端口号。

1f7e9b70d86c2e2de406f4b896861931.png

源端(RTA)向目的端(主机B)发送一个UDP报文,TTL值为1,目的UDP端口号是大于30000的一个数,因为在大多数情况下,大于30000的UDP端口号是任何一个应用程序都不可能使用的端口号。

第一跳(RTB)收到源端发出的UDP报文后,判断出报文的目的IP地址不是本机IP地址,将TTL值减1后,判断出TTL值等于0,则丢弃报文并向源端发送一个ICMP超时(Time Exceeded)报文(该报文中含有第一跳的IP地址10.0.0.2),这样源端就得到了RTB的地址。

源端收到RTB的ICMP超时报文后,再次向目的端发送一个UDP报文,TTL值为2。

第二跳(RTC)收到源端发出的UDP报文后,回应一个ICMP超时报文,这样源端就得到了RTC的地址(20.0.0.2)。

以上过程不断进行,直到目的端收到源端发送的UDP报文后,判断出目的IP地址是本机IP地址,则处理此报文。根据报文中的目的UDP端口号寻找占用此端口号的上层协议,因目的端没有应用程序使用该UDP端口号,则向源端返回一个ICMP端口不可达(Destination Unreachable)报文。

源端收到ICMP端口不可达报文后,判断出UDP报文已经到达目的端,则停止Tracert程序,从而得到数据报文从源端到目的端所经历的路径(10.0.0.2;20.0.0.2;30.0.0.2)。

免费ARP

  • 配完ip的时候发送一个arp检测是否arp冲突

8923035a6d2b7daded99890ada0cb8ed.png

猜你喜欢

转载自blog.csdn.net/weixin_45988710/article/details/131520695