TCP/UDP常见考点

news/2024/5/18 12:59:28 标签: tcp/ip, udp, 网络

1. TCP连接过程

1.1 三次握手

客户端 服务端 SYN=1 seq=x SYN=1 ACK=1 seq=y ack=x+1 ACK=1 seq=x+1 ack=y+1 客户端 服务端
  • 第一次握手:客户端向服务端发起建立连接请求,客户端会随机生成一个起始序列号 x x x,客户端向服务端发送的字段中包含标志位 S Y N = 1 SYN=1 SYN=1,序列号 s e q = x seq=x seq=x;
  • 第二次握手:服务端在收到客户端发来的报文后,会随机生成一个服务端的起始序列号 y y y,然后给客户端回复一段报文,其中包括标志位 S Y N = 1 SYN=1 SYN=1 A C K = 1 ACK=1 ACK=1,序列号 s e q = y seq=y seq=y,确认号 a c k = x + 1 ack=x+1 ack=x+1;
  • 第三次握手:客户端收到服务端发来的报文后,会再向服务端发送报文,其中包含标志位 A C K = 1 ACK=1 ACK=1,序列号 s e q = x + 1 seq=x+1 seq=x+1,确认号 a c k = y + 1 ack=y+1 ack=y+1

1.2 四次挥手

客户端 服务端 FIN=1 seq=p ACK=1 seq=q ack=p+1 ACK=1 seq=q ack=p+1 ACK=1 seq=x+1 ack=y+1 客户端 服务端
  • 第一次挥手:客户端发出连接释放报文段,其中 F I N = 1 , s e q = p FIN=1,seq=p FIN=1seq=p,并停止再发送数据,主动关闭TCP连接,等待服务端的确认;
  • 第二次挥手:服务端收到连接释放报文段后即发出确认报文段 A C K = 1 , s e q = q , s e q = p + 1 ACK=1,seq=q,seq=p+1 ACK=1seq=qseq=p+1;客户端收到服务端的确认后,此时服务端还有未发送完毕的数据,客户端需等待服务端发送完毕;
  • 第三次挥手:服务端发送完数据,发出连接释放报文段 F I N = 1 , A C K = 1 , s e q = r , a c k = p + 1 FIN=1,ACK=1,seq=r,ack=p+1 FIN=1ACK=1seq=rack=p+1;
  • 第四次挥手:客户端收到服务端的连接释放报文段后,对此发出确认报文段 A C K = 1 , s e q = p + 1 , a c k = r + 1 ACK=1,seq=p+1,ack=r+1 ACK=1seq=p+1ack=r+1

2. TCP有哪些特点?

  1. TCP是面向连接的传输层协议。
  2. 点对点,每一条TCP连接只能有两个端点。
  3. TCP提供可靠交付的服务。
  4. TCP提供全双工通信。
  5. 面向字节流。

3. TCP和UDP的区别

  1. TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接。
  2. TCP提供可靠的服务;UDP不保证可靠交付。
  3. TCP面向字节流,把数据看成一连串无结构的字节流;UDP是面向报文的。
  4. TCP有拥塞控制;UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如实时视频会议等)。
  5. 每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的通信方式。
    TCP首部开销20字节;UDP的首部开销小,只有8个字节。

4. TCP 和 UDP 分别对应的常见应用层协议

基于TCP的应用层协议有:HTTP、FTP、SMTP、TELNET、SSH

  • HTTP:HyperText Transfer Protocol(超文本传输协议),默认端口80
  • FTP: File Transfer Protocol (文件传输协议), 默认端口(20用于传输数据,21用于传输控制信息)
  • SMTP: Simple Mail Transfer Protocol (简单邮件传输协议) ,默认端口25
  • TELNET: Teletype over the Network (网络电传), 默认端口23
  • SSH:Secure Shell(安全外壳协议),默认端口 22

基于UDP的应用层协议:DNS、TFTP、SNMP

  • DNS : Domain Name Service (域名服务),默认端口 53
  • TFTP: Trivial File Transfer Protocol (简单文件传输协议),默认端口69

5. TCP的粘包和拆包

TCP是面向流,没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。
要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包;接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包;要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包;

解决方案:

  • 发送端将每个数据包封装为固定长度
  • 在数据尾部增加特殊字符进行分割
  • 将数据分为两部分,一部分是头部,一部分是内容体;其中头部结构大小固定,且有一个字段声明内容体的大小。

6. 说说TCP是如何确保可靠性的呢?

  • TCP的连接是基于三次握手,而断开则是基于四次挥手。确保连接和断开的可靠性。
  • TCP会记录哪些数据发送了,哪些数据被接收了,哪些没有被接受,并且保证数据包按序到达,保证数据传输不出差错。
  • 它有数据包校验、ACK应答、超时重传(发送方)、失序数据重传(接收方)、丢弃重复数据、流量控制(滑动窗口)和拥塞控制等机制。

7. TCP的滑动窗口机制和拥塞控制

详情见我另一篇文章:https://blog.csdn.net/qq_37117595/article/details/125976912

后续内容还会继续补充…


http://www.niftyadmin.cn/n/4924999.html

相关文章

Sap ALV GUI Status 新建自定义按钮,传输到Q系统后无法显示

在D系统添加了ALV GUI Status的几个自定义按钮,在D系统显示正常,但是在Q系统无法显示,可参考如下处理方法。 登录Q系统,SE38打开对应的程序 --> 选中GUI Status (例S0100)–> 右键 -->Active Int…

GD32F103VE串口与DMA传输

GD32F103VE串口与DMA传输,本测试采用的的串口1和DMA0之间的数据传输,然后通过RS485和其它设备进行数据交换,没有采用任何中断参与。 GD32F103VE的DMA0请求映射到串口: 1,USART0_RX映射到DMA0的通道4,USART…

Python-OpenCV中的图像处理-图像金字塔

Python-OpenCV中的图像处理-图像金字塔 图像金字塔高斯金字塔拉普拉斯金字塔 金字塔图像融合 图像金字塔 同一图像的不同分辨率的子图集合,如果把最大的图像放在底部,最小的放在顶部,看起来像一座金字塔,故而得名图像金字塔。cv2…

协程和线程的区别

调度方式:线程由操作系统内核进行调度,而协程由程序员或运行时环境进行调度。线程的调度是由操作系统决定的,它可以在不同的核心上并行执行。而协程的调度是由程序员显式地控制的,它在单个线程内通过协作式调度来实现并发。 并发…

树状结构数据,筛选指定数据

问题描述: 应用场景和需求:对一个树状结构的数据,进行CRUD 时,想筛选出 树状结构数据中存在变动的部分。 操作步骤 准备需要的数据: 1.先拿到 你原来的树状结构数据 2.再筛选出 需要保留的数据集合id,也…

分班查询系统学生信息在线采集方法和具体操作教程

作为教师,特别是临近新学年,我们经常需要进行学生分班工作,这是一项繁琐但非常重要的工作。为了提高工作效率,我们可以利用易查分轻松生成一个学生分班查询系统。本文将介绍如何利用易查分设计和开发这样一个系统。 我们可以选择使…

Java课题笔记~ JavaWeb概述/开发基础

JavaWeb概述/开发基础 1.XML基础 (1)XML概述 (2)XML语法 (3)DTD约束 (4)Schema约束(XML Schema 比 DTD 更强大) 2.Web基础知识 Web是一个分布式的超媒…

tui.calender日历在vue中的使用1.0

官网:https://ui.toast.com/tui-calendar github:https://github.com/nhn/tui.calendar/tree/main 月、周、日视图都有,拖拽也比较方便,但是自己用起来比较费劲,参考文档写得不全,做个记录日后方便参考&…