网络常用协议

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 网络常用协议

TCP

TCP报文格式:

Source port(16)源端口

Destination port (16) 目的端口

Sequence number (32):序列号

Acknowledgement number (32):确认号

Header length (4):头部长度

Reserved (6):保留,必须填0,长度为6比特

Control bits (6):控制位。包含FIN、ACK、SYN、URG、PSH、RST等标志位,代表不同状态下的TCP数据段。

Window (16):窗口TCP的流量控制,这个值表明当前接收端可接受的最大的数据总数(以字节为单位)。窗口最大为65535字节。长度为16比特。

Checksum (16):校验和。

Urgent (16):紧急指针,当URG标志为1时才有效。

Options:选项字段,长度为0-40字节,可扩充TCP长度。决定TCP最长长度,为60字节。

Data (varies)

TCP的序列号和确认号:

序列号seq:TCP通信过程中某一个传输方向上的字节流的每个字节的序号,通过这个来确认发送的数据有序,比如现在序列号为a,下个序列号就是a+1

确认号ack:TCP对上一次seq序号做出的确认号,用来响应TCP报文段,给收到的TCP报文段的序号seq加1。带SYN和FIN的,确认号在序列号基础上+1

TCP的标志位:

  1. SYN:简写为S,同步标志位,用于建立会话连接,同步序列号;
  2. ACK: 简写为.,确认标志位,对已接收的数据包进行确认;
  3. FIN: 简写为F,完成标志位,表示我已经没有数据要发送了,即将关闭连接;
  4. PSH:简写为P,推送标志位,表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队;
  5. RST:简写为R,重置标志位,用于连接复位、拒绝错误和非法的数据包;
  6. URG:简写为U,紧急标志位,表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理;

TCP三次握手建立连接:

  • 第一次握手
    PC1将TCP报文标志位SYN置为1,随机产生一个序号值seq=a,保存在TCP首部的序列号(Sequence Number)字段里,因为没收到过来自PC2的任何报文,所以确认序列号为0 ;指明PC1打算连接的PC2的端口,并将该数据包发送给PC2,发送完毕后,PC1进入SYN_SENT状态,等待PC2确认。



  • 第二次握手
    初始序列号b为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为a+1;PC2收到数据包后由标志位SYN=1知道PC1请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=a+1,随机产生一个序号值seq=b,并将该数据包发送给PC1以确认连接请求,PC2进入SYN_RCVD状态。



  • 第三次握手
    PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认号为b+1。PC2收到之后,TCP双向连接建立。

  • 注意:我们上面写的ack和ACK,不是同一个概念:
  • 小写的ack代表的是头部的确认号Acknowledge number, 缩写ack,是对上一个包的序号进行确认的号,ack=seq+1。
  • 大写的ACK,则是我们上面说的TCP首部的标志位,用于标志的TCP包是否对上一个包进行了确认操作,如果确认了,则把ACK标志位设置成1。

我们看下实战中TCP的三次握手过程:

  • 第一次握手,客户端51323端口号向服务器端80号端口发起连接,此时标志位flags=S,即SYN=1标志,表示向服务端发起连接的请求,同时生成序列号seq=84689409
  • 第二次握手,服务端标志位flags=[S.],即SYN+ACK标志位设置为1,表示对上一个请求连接的报文进行确认,同时设置ack=seq+1=84689410,生成序列号seq=1893430205。
  • 第三次握手,客户端对服务端的响应进行确认,所以此时标志位是[.]即ACK=1,同时返回对上一个报文的seq的确认号,ack=1893430206

TCP的数据传输的过程

PC1首先发送报文,seq=a+1,ack=b+1,载荷长度为12字节。

PC2收到后,对PC的报文回复确认报文,seq=b+1,ack=a+1+12,确认的是PC1发给PC2的报文序列号。

PC1收到后PC2的确认报文后,又给PC2发送一个报文,seq=a+1+12,ack=b+1,载荷长度为66字节。

PC2收到后,回复PC1确认报文,seq=b+1,ack=a+12+1+66。

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双向连接断开。

TCP滑动窗口机制

1. TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出,主要是根据网络情况动态调整窗口大小

2. TCP将数据分段发送,确保发送的数据到达接收端也是正确的。利用的是“空洞”。TCP不会对每个数据包都返回ACK,而是累计返回的。

一文看懂TCP滑动窗口原理

https://zhuanlan.zhihu.com/p/571726228

UDP

不可靠的,无连接的。

Source Port:源端口,标识哪个应用程序发送。长度为16比特。

Destination Port:目的端口,标识哪个应用程序接收。长度为16比特。

Length:该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535字节(包括8字节的报头,和65527字节的数据)。

Checksum:覆盖UDP头部和UDP数据的校验和,长度为16比特。

ARP

是根据IP地址获取物理地址的一个TCP/IP协议。

ARP工作过程:

假设主机A和主机B是同网段。

  1. 主机A首先查看自己的ARP缓存表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
  2. 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
  3. 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
  4. 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

ARP请求的目的MAC地址一开始为0,因为并不知道目的地址的MAC地址,而在传输ARP请求时,封装成帧后的MAC地址帧设成全F,表示这是一个广播包。因此ARP请求包的目的MAC地址是全0,封装成帧之后为全F。

ARP表

ARP表项分为ARP静态表和ARP动态表。

ARP静态表可以使用arp static ip地址 mac地址来设置,静态表没有老化时间。

ARP动态表的老化时间是20分钟,思科是5分钟。

免费ARP

免费ARP  地址冲突检测。

工作过程:

发送源IP,目的IP均为自己的ARP报文,如果没有收到arp响应,则不存在冲突;如果收到了arp响应,则表示该地址已被其他主机占用。

产生免费arp的场景:

  1. 主机手动配置IP地址时;
  2. DHCP服务器在分发地址的最后一个阶段,会发送免费arp探测该地址是否可用;
  3. VRRP在进行主备网关切换时需要发送免费ARP刷新下游设备的MAC表, 杜绝流量向错误的端口转发;

ICMP

报文由type、code等构成

Internet控制消息协议ICMP,是IP协议的辅助协议。

ICMP协议用来在网络设备间传递各种差错和控制信息,用于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。

ICMP消息封装在IP报文中,IP报文头部Protocol值为1时表示ICMP协议。

ping就是基于ICMP协议 ——Echo request type(8) code(0)

Echo reply type(0) code(0)

ICMP重定向

ICMP重定向报文是ICMP控制报文的一种。在特定的情况下,当路由器检测到一台机器使用非最优路由的时候,它会向该主机发送一个ICMP重定向报文,请求主机改变路由。

ICMP重定向过程:

1.主机A希望发送报文到服务器A,于是根据配置的默认网关地址向网关RTB发送报文。

2.网关RTB收到报文后,检查报文信息,发现报文应该转发到与源主机在同一网段的另一个网关设备RTA,此转发路径是更优的路径,所以RTB会向主机发送一个Redirect消息,通知主机直接向另一个网关RTA发送该报文。

3.主机收到Redirect消息后,会向RTA发送报文,然后RTA会将该报文再转发给服务器A。

ICMP差错检测

ICMP Echo消息常用于诊断和目的地之间的网络连通性,同时还可以提供其他消息,如报文往返时间等。

功能:Ping

ping是网络设备、Windows、Linux和Unix平台上的一个命令,其实是一个小巧而实用的应用程序,该应用基于ICMP协议。Ping常用于探测到达目的节点的网络可达性。

ICMP错误报告

ICMP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因。如:当网络设备无法访问目标网络时,会自动发送ICMP目的不可达报文到发送端设备。

功能:Tracert

tracert基于报头中的TTL值来逐跳跟踪报文的转发路径。tracert是检测网络丢包和时延的有效手段,同时还可以发现网络中的路由环路。

Tracert

简单网络诊断工具,探测数据包从源地址到目的地址经过的路由器IP地址

1.进行tracert的主机或者设备(R1)最开始发送UDP包(源IP自己,目的IP目标,TTL=1,一个特殊的随机的端口号,一般很大)

2.R2收到R1发送的TTL为1的UDP包,TTL-1=0,则丢包并且ICMP马上向R1发送一个超时的报错包,并且在ICMP数据部分带上R2的接口IP地址,起始路由器收到TTL超时报错包后从ICMP数据种就探测到了下一跳IP地址

3.第二跳则发TTL=2的UDP包,可以探测到R1到R3的路径IP地址,R3则向R1发送超时包。

4.以此类推,但是到探测最后一跳时候,TTL=0,但是数据包已经到了目的地,这时候是不会有超时报错的,那么怎么判断是否到达目的地了呢?别忘了,我们的tracert包协带了特殊的端口号,而且一般很大,并且没发一个UDP则增长1,这么大的端口一般的设备都不会开启,那么在最后一跳虽然TTL不会超时报错,但是会有端口不可达的报错,所以最后三个报错包为端口不可达的ICMP报错包。

R1pingR6

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6天前
|
传感器 数据采集 网络协议
什么是网络通信中的 Modbus协议?
网络协议是网络通信中至关重要的一部分,它定义了网络中两个或多个设备之间通信的规则、过程和格式。这些规则确保了计算机网络设备能够使用一种通用语言来传输和接收数据,而不管它们的设计、硬件或基础设施如何。
11 1
|
8天前
|
网络协议 数据安全/隐私保护 Python
在通讯系统工程中,这通常包括硬件、软件、网络协议、数据传输等多个方面的设计和实现。
在通讯系统工程中,这通常包括硬件、软件、网络协议、数据传输等多个方面的设计和实现。
|
9天前
|
网络协议 安全 Python
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
|
1月前
|
机器学习/深度学习 网络协议 网络性能优化
[计算机网络]深度学习传输层TCP协议
[计算机网络]深度学习传输层TCP协议
27 1
|
1月前
|
监控 网络协议 安全
Verilog代码在上网行为管理软件中的网络设备控制与协议分析
**Verilog摘要:** Verilog是硬件描述语言,用于数字电路设计和网络设备控制。它在上网行为管理软件中用于控制路由器、交换机等,例如通过简单模块控制端口状态。此外,Verilog还支持协议分析,如解析以太网帧提取MAC地址。监控数据可结合Verilog实现自动化提交,例如通过HTTP发送请求到服务器,实现实时监控和响应。这些示例展示了Verilog在网络安全和性能优化中的应用潜力。
100 1
|
18天前
|
传感器 算法
基于LEACH路由协议的网络性能matlab仿真,包括数据量,能耗,存活节点
- **LEACH协议**在WSN中通过分簇减少能耗,普通节点向最近簇头发送数据,簇头融合后发送给基站。本项目研究LEACH在不同初始能量、数据包及控制包长度条件下的网络性能,如剩余节点、能量、接收数据量和累计接收量。
|
1月前
|
网络协议 C语言 网络架构
计算机网络——数据链路层-点对点协议(组成部分、PPP帧格式、透明传输、差错检测、工作状态)
计算机网络——数据链路层-点对点协议(组成部分、PPP帧格式、透明传输、差错检测、工作状态)
97 7
|
20天前
|
人工智能 缓存 网络协议
网络层之三层交换、icmp协议、arp协议
网络层之三层交换、icmp协议、arp协议
|
20天前
|
缓存 网络协议 网络性能优化
计算机网络—传输层-tcp、udp协议详解
计算机网络—传输层-tcp、udp协议详解