TCP三次握手和四次挥手面试题

1.TCP基础知识

 1.1 TCP头格式有哪些

 TCP头部格式中包含源端口号、目标端口号,序列号,确认应答号,控制位,窗口大小,校验和,紧急指针,选项,数据等等。

  • 序列号在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机,每发送一次数据,就[累加]一次该[数据字节数]的大小。用来解决网络包乱序问题
  • 确认应答号:指下一次[期望]收到的数据的序列号,发送端收到这个确认应答后人为这个序号以前的数据都被正常接收。用来解决丢包的问题。
  • 控制位:
  1. ACK:该位为1时,[确认应答]的字段变为有效,TCP规定除最初建立连接时的SYN包之外该位必须设置为1
  2. RST:该位为1时,表示TCP连接中出现异常必须强制断开连接
  3. SYN:该位为1时,表示希望建立连接,并在其[序列号]的字段进行序列号初始值的设定
  4. FIN:该位为1时,表示后面不会再有数据,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN为为1的TCP段。

1.2 为什么需要TCP协议?TCP工作在哪一层?

  因为IP层是不可靠的,不保证网络包的交付,不保证网络包的按序交付,也不保证网络包中的数据完整性。如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的TCP负责可靠传输。

  TCP是一个工作在传输层的可靠数据传输的协议,能确保接收端接受的网络包无损坏无间隔非冗余且有序

1.3 什么是TCP?

  TCP面向连接的可靠的基于字节流传输层通信协议

  • 面向连接:一定是[一对一]才能连接,不像UDP可以一个主机同时向多个主机发送消息即一对多
  • 可靠:无论网络链路中出现什么变化,TCP都可以保证一个报文一定能够到达接收端
  • 字节流:用户消息通过TCP协议传输传输时,消息可能会被操作系统[分组]程多个TCP报文,如果接收方的程序不知道[消息的边界],那么无法读出一个有效的用户消息。TCP报文是[有序的]当前一个TCP报文没有收到时,即使收到后面的报文,也不能将其交给应用层处理,同时对[重读]报文自动丢弃

1.4 什么是TCP连接

  用于保证可靠性和流量控制维护的某些状态信息(Socket、序列号和窗口大小)称为连接。

   建立一个TCP连接需要客户端和服务端达成Socket、序列号、窗口大小等三个信息的共识。

  • Socket:由IP地址和端口号组成
  • 序列号:用来解决乱序问题
  • 窗口大小:做流量控制

1.5 如何确定一个TCP连接?

    通过TCP四元组(源地址源端口目的地址目的端口)可以唯一确定一个TCP连接。

  源地址和目的地址的字段(32 位)是在 IP 头部中,作用是通过 IP 协议发送报文给对方主机源端口和目的端口的字段(16 位)是在 TCP 头部中,作用是告诉 TCP 协议应该把报文发给哪个进程

1.5.1 IP服务端监听一个端口,它的TCP最大连接数是多少

  服务端固定在某个本地端口监听,等待客户端的连接请求。因此,客户端IP和端口可变,理论值计算公式如下:

   对 IPv4,客户端的 IP 数最多为 2 的 32 次方,客户端的端口数最多为 2 的 16 次方,也就是服务端单机最大 TCP 连接数,约为 2 的 48 次方

1.6 TCP和UDP区别,以及各自应用场景?

  UDP是无连接的通信协议,它的头部格式如下:

  •  目标和源端口:告诉UDP协议将报文发送给哪个进程;
  • 包长度:保存UDP首部的长度和数据长度之和;
  • 校验和:提供可靠的首部和数据,防止收到网络传输中的受损UDP包

1.6.1 区别

  1. 连接:TCP是面向连接的传输层协议,传输数据前先建立连接;UDP不需要连接,即可传输数据
  2. 服务对象:TCP是一对一的两点服务,即一条连接只有两个端点;UDP支持一对一、一对多,多对多的交互通信;
  3. 可靠性:TCP是可靠交互数据,数据可以误差粗、不丢失、不重复、按序到达;UDP是尽最大努力交付,不保证可靠交互数据,但基于QUIC可以实现可靠传输;
  4. 拥塞控制、流量控制:TCP有拥塞控制和流量控制机制,保证数据安全传输。UDP没有,但网络堵塞不影响UDP发送效率;
  5. 首部开销:TCP首部较长,未使用选项就有二十个字节,使用后更长;UDP首部只有八个字节,且固定不变,开销较小;
  6. 传输方式:TCP是流式传输,无边界,但保证顺序和可靠;UDP是一个包一个包传送,有边界,但可能丢包和乱序。
  7. 分片不同:TCP数据大小大于MSS则会在传输层分片,目标主机也会在传输层组装TCP数据包,若中途丢包,重传丢失包即可;UDP数据大小若大于MTU,则会在IP分片,目标主机会在IP组装数据,接着传输给传输层。

1.6.2 应用场景

  由于 TCP面向连接,能保证数据的可靠性交付,因此经常用于:FTP 文件传输,HTTP / HTTPS;由于 UDP 面向无连接,它可以随时发送数据,再加上 UDP 本身的处理既简单又高效,因此经常用于:包总量较少的通信,如 DNS 、SNMP 等;视频、音频等多媒体通信广播通信。

1.7 TCP和UDP可使用同一个端口吗

  可以的。传输层有两个传输协议分别是 TCP 和 UDP,在内核中是两个完全独立的软件模块。当主机收到数据包后,可在 IP 包头的「协议号」字段查看该数据包是 TCP/UDP,所以可根据IP首部确定送给哪个模块(TCP/UDP)处理,送给 TCP/UDP 模块的报文根据「端口号」确定送给哪个应用程序处理

2.连接建立

 

3.连接断开

 

4.Socket编程

 

5.参考文章

本人博客内容是基于小林coding的图解系统写的,中间省略了部分内容,大家可以去小林coding博客看更详细的图解网络,链接为:小林coding (xiaolincoding.com)

posted @ 2023-08-01 20:35  求知律己  阅读(20)  评论(0编辑  收藏  举报