当前位置: 首页 > news >正文

网络_协议

 关键词:

OSI是Open System Interconnect的缩写,意为开放式系统互联。

RTT : Round-Trip time 往返时间

RTO:Retransmission Timeout超时重传时间

MSL : 

OSI 七层模型和 TCP/IP 四层模型

OSI七层模型和TCP/IP五层模型(原来应该是四层,新版教程改成五层)的映射关系,以及对应的功能和协议:

image

OSI七层模型TCP/IP五层模型对应网络协议功能
应用层(Application)应用层(Application)HTTP、TFTP, FTP, NFS, WAIS、SMTP文本传输、电子邮件、文件服务、虚拟终端等
表示层(Presentation)Telnet, Rlogin, SNMP, Gopher数据格式化、代码转换、数据加密
会话层(Session)SMTP, DNS解除/建立与别的连接点的Connection
传输层(Transport)传输层(Transport)TCP, UDP提供端对端接口
网络层(Network)网络层(Network)IP, ICMP, ARP, RARP, AKP, UUCP为数据包提供路由选择
数据链路层(Data Link)数据链路层(Data Link)FDDI, Ethernet, Arpanet, PDN, SLIP, PPP传输带地址的帧、提供错误检测功能
物理层(Physical)物理层(Physical)IEEE 802.1A, IEEE 802.2到IEEE 802.11以二进制数据形式在物理媒介上传输数据

无论哪种模型,都可以看出来,四层是指传输层,七层是指应用层

TCP三次握手四次挥手

TCP是面向连接的,所有的连接是指双方都确认了连接的建立。

三次握手

我们来看一下三次握手的过程:

  • 一开始,客户端和服务端都处于 CLOSED 状态。客户端主动打开连接,服务端被动打卡连接,结束CLOSED 状态,开始监听,进入 LISTEN状态。

一次握手

客户端会随机初始化序号(client_isn),

  • 将此序号置于 TCP 首部的「序号」字段中,
  • 同时把 SYN 标志位置为 1 ,表示 SYN 报文。

接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接。该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态。

二次握手

服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(server_isn),

  • 将此序号填入 TCP 首部的「序号」字段中,
  • 其次把 TCP 首部的「确认应答号」字段填入 client_isn + 1,
  • 接着把 SYN 和 ACK 标志位置为 1

最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD 状态。

三次握手

客户端收到服务端报文后,还要向服务端回应最后一个应答报文,

  • 首先该应答报文 TCP 首部 ACK 标志位置为 1 ,
  • 其次「确认应答号」字段填入 server_isn + 1 ,

最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。

好了,经过三次握手的过程,客户端和服务端之间的确定连接正常,接下来进入ESTABLISHED状态,服务端和客户端就可以快乐地通信了。

问题:为什么是三次,不是两次、四次?

两次:如果只有前两次,服务端会认为连接已经建立,如果客户端后续不在发送报文,也就是客户端不认可这个链接,相当于这个连接资源浪费了。

四次:三次就可以完成双方的确认,没有必要多进行一次。

四次挥手

一次挥手

  • 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。

二次挥手

  • 服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状态。

三次挥手

  • 客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态。等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。

四次挥手

  • 客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态
  • 服务器收到了 ACK 应答报文后,就进入了 CLOSED 状态,至此服务端已经完成连接的关闭
  • 客户端在经过 2MSL 一段时间后,自动进入 CLOSED 状态,至此客户端也完成连接的关闭。

可以看到,每个方向都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手

问题:为什么是四次,不是三次?

三次:如果是三次,需要将服务端的ACK和FIN包合成一次发送,但是服务端在收到客户端的FIN包后,需要释放资源等各种善后操作,这个会比较浪费时间,导致给客户端端的响应时间超时,从而导致客户端重发FIN包。 所以将服务端的ACK和FIN分开发送。

思考:为什么握手需要经过双方对彼此的确认, 而挥手只需要一方对另一方的确认就可以了呢?

握手需要双方对彼此的确认,是要保证连接得到双方认可(不浪费);挥手其实也是双方对彼此的确认, 只不过是分两阶段进行的。

TCP与UDP

TCP是一个面向连接的、可靠的、基于字节流的传输层协议。

UDP是一个面向无连接的传输层协议。

面向连接:指的是客户端和服务端建立连接,在双方相互通信之前,TCP需要三次握手建立连接,而UDP没有建立连接的过程。

可靠性:TCP花了很多的功夫保障连接的可靠性

  • TCP有状态:TCP会进准记录哪些数据发送了,哪些数据被对方接受了,哪些没有被接受,而且保证数据包按序到达,不允许半点差错。
  • TCP可空:意识到丢包了或者网络环境不佳,TCP会根据情况调整自己的行为,控制自己的发送速度或者重发。

报文中的序列号

凡是对端的确认都需要序列号,防止端发送重复的报文。这样也使得调用有顺序性。

TCP中的端口号

端口号位于传输层的TCP报文头中。端口号用两个字节表示,最大值65535

1. 熟知的端口号:0~1023

  • HTTP: 80
  • HTTPS: 443
  • FTP: 21
  • SSH: 22
  • Telnet: 23
  • SMTP: 25
  • DNS: 53

2. 已登记的端口号:1024~49151

  • MySQL: 3306
  • Oracle DB: 1521
  • Redis: 6379
  • MongoDB: 27017
  • Tomcat: 8080

3. 临时端口号:49152~65535 

        你的浏览器在访问网站时,操作系统会随机分配这个范围内的一个端口作为源端口

telnet用法

1. telnet ip/domianName  port :远端这个地址下的这个端口是否可以访问

2. telnet 发送http请求

输入红框里的内容, 发送http请求,就会得到http的响应

curl  命令同样可以访问网络域名

netstat

> netstat -at

> netstat -au

tcpdump

是一个命令行的网络流量分析工具,功能非常强大,一般用于抓TCP的包。

tcpdump -i any host 180.101.49.44

  • tcpdump 抓包
  • -i  在机器的网卡上抓包
  • any 任意网卡
  • 180.101.49.44  某次测试时百度的地址

 参考:

1. 深入分析四层/七层网关 - Hello-Brand - 博客园

2. “三次握手,四次挥手”这么讲,保证你忘不了 - 三分恶 - 博客园

http://www.dtcms.com/a/357195.html

相关文章:

  • (十)ps识别:Swin Transformer-T 与 ResNet50 结合的 PS 痕迹识别模型训练过程解析
  • 链表有环找入口节点原理
  • Vue3 + TS + MapboxGL.js 三维地图开发项目
  • Marin说PCB之POC电路layout设计仿真案例---11
  • Jenkins Pipeline(二)-设置Docker Agent
  • 渲染速度由什么决定?四大关键因素深度解析
  • 【拍摄学习记录】07-影调、直方图量化、向右向左
  • Docker部署openai-edge-tts和即梦API以及应用案例
  • 透视文件IO:从C库函数的‘表象’到系统调用的‘本质’
  • 12、做中学 | 初一上期 Golang函数 包 异常
  • electron-vite 配合python
  • AI驱动万物智联:IOTE 2025深圳展呈现无线通信×智能传感×AI主控技术融合
  • 软件系统的部署方式:单机、主备(冷主备、热主备)、集群
  • LeetCode100-54螺旋矩阵
  • Verilog 硬件描述语言自学——重温数电之组合逻辑电路
  • 高性能 JSON:System.Text.Json Source Generator vs 手写 Span(Utf8JsonReader/Writer)
  • 并发编程——06 JUC并发同步工具类的应用实战
  • 如何高效批量完成修改文件名的工作?
  • NullPointerException 空指针异常,为什么老是遇到?
  • 嵌入式Ubuntu22.04安装过程详解实现
  • Oracle SQL性能调优之魂:深入理解索引原理与优化实践
  • 智能接听,破局高峰占线:云蝠AI客服重塑企业服务新范式
  • 【Spring底层分析】Spring AOP补充以及@Transactional注解的底层原理分析
  • 球型摄像机实现360°无死角
  • 【前端教程】从基础到专业:诗哩诗哩网HTML视频页面重构解析
  • 技术干货|Prometheus告警及告警规则
  • APM32芯得 EP.31 | APM32F402 HC-SR04超声测距经典操作:波形输出与滤波
  • 微算法科技(NASDAQ:MLGO)一种基于FPGA的Grover搜索优化算法技术引领量子计算
  • PCIe 6.0配置与地址空间架构:深入解析设备初始化的核心机制
  • C#实现OPC客户端