网络常用协议

简介: 网络常用协议

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
8
分享
相关文章
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
39 22
掌握网络通信协议和技术:开发者指南
本文探讨了常见的网络通信协议和技术,如HTTP、SSE、GraphQL、TCP、WebSocket和Socket.IO,分析了它们的功能、优劣势及适用场景。开发者需根据应用需求选择合适的协议,以构建高效、可扩展的应用程序。同时,测试与调试工具(如Apipost)能助力开发者在不同网络环境下优化性能,提升用户体验。掌握这些协议是现代软件开发者的必备技能,对项目成功至关重要。
智能体竟能自行组建通信网络,还能自创协议提升通信效率
《一种适用于大型语言模型网络的可扩展通信协议》提出创新协议Agora,解决多智能体系统中的“通信三难困境”,即异构性、通用性和成本问题。Agora通过标准协议、结构化数据和自然语言三种通信格式,实现高效协作,支持复杂任务自动化。演示场景显示其在预订服务和天气预报等应用中的优越性能。论文地址:https://arxiv.org/pdf/2410.11905。
48 6
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
256 3
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
113 11
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
142 3
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
272 3