TCP/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

后续内容还会继续补充…

你可能感兴趣的:(网络,tcp/ip,udp,网络)