网络常用协议

简介: 网络常用协议

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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
数据采集 算法 数据挖掘
模块化控制协议(MCP)在网络中增强智能体执行效率的研究
随着Web3技术的迅速发展,去中心化应用和智能体在各种领域的应用逐渐增多。MCP(Modularized Control Protocol,模块化控制协议)作为一种增强智能体执行能力的关键技术,为Web3场景中的智能体提供了更强的灵活性和可扩展性。本文将探讨如何利用MCP技术提升智能体在Web3场景中的执行能力,并通过实例代码展示其实现路径。
697 22
|
5月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
6月前
|
运维 架构师 安全
二层协议透明传输:让跨域二层协议“无感穿越”多服务商网络
简介:本文详解二层协议透明传输技术,适用于企业网工、运营商及架构师,解决LLDP/LACP/BPDU跨运营商传输难题,实现端到端协议透传,提升网络韧性与运维效率。
|
负载均衡 网络协议 算法
|
10月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
278 18
|
11月前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
313 22
|
11月前
|
网络协议 数据安全/隐私保护 网络架构
|
12月前
|
缓存 网络协议 API
掌握网络通信协议和技术:开发者指南
本文探讨了常见的网络通信协议和技术,如HTTP、SSE、GraphQL、TCP、WebSocket和Socket.IO,分析了它们的功能、优劣势及适用场景。开发者需根据应用需求选择合适的协议,以构建高效、可扩展的应用程序。同时,测试与调试工具(如Apipost)能助力开发者在不同网络环境下优化性能,提升用户体验。掌握这些协议是现代软件开发者的必备技能,对项目成功至关重要。
|
人工智能 自然语言处理 决策智能
智能体竟能自行组建通信网络,还能自创协议提升通信效率
《一种适用于大型语言模型网络的可扩展通信协议》提出创新协议Agora,解决多智能体系统中的“通信三难困境”,即异构性、通用性和成本问题。Agora通过标准协议、结构化数据和自然语言三种通信格式,实现高效协作,支持复杂任务自动化。演示场景显示其在预订服务和天气预报等应用中的优越性能。论文地址:https://arxiv.org/pdf/2410.11905。
472 6
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法

热门文章

最新文章