TCP相关面试题

Q1:TCP报文长度是在TCP三次握手中那一次确定的?

这个是关于TCP报文的最大报文段长度mss的相关问题。在TCP连接的前两次握手中(SYN报文中),通信双方都会在选项字段中告知对方自己期待收到最大报文长度(mss值),以双方两个SYN报文中最小的mss最为本次数据传输的mss值。通信双方以“协商”的方式来确定报文长度的,前两次握手是告诉对方自己的mss值,在第三次握手确定mss值

Q2:TCP报文长度是由什么确定的?

这个跟具体传输网络有关,以太网的MTU为1500字节,Internet的MTU为576字节。

MTU是网络层的传输单元,那么MSS = MTU - 20字节(IP首部) - 20字节(TCP首部)。所以以太网的MSS为1460字节,而Internet的MSS为536字节。

Q3:TCP三次握手中,accept函数是发生在TCP三次握手的那个阶段?

服务器端的listen函数:int listen(int sockfd, int backlog);其中sockfd是与某个服务绑定的套接口,backlog是允许阻塞的最大请求个数。

在服务器端存在着两个队列,一个是已经通过三次握手“建立连接的队列“(FIFO with established state)处于Established状态,另一个是“未完成连接的队列”( FIFO with syn_rcvd state)处于SYN_RCVD状态。这两个队列的长度之和就是backlog。在服务器端的accept函数,相当于从“建立连接的队列”中取出一个来进行后续的数据交换。

而三次握手是发生在connect函数中,connect函数执行成功就相当于已经建立三次握手。

Q4:如果TCP连接过程中,第三次握手失败怎么办?

server端发送了SYN+ACK报文后就会启动一个定时器,等待client返回的ACK报文。如果第三次握手失败的话client给server返回了ACK报文,server并不能收到这个ACK报文。那么server端就会启动超时重传机制,超过规定时间后重新发送SYN+ACK,重传次数根据/proc/sys/net/ipv4/tcp_synack_retries来指定,默认是5次。如果重传指定次数到了后,仍然未收到ACK应答,那么一段时间后,server自动关闭这个连接。但是client认为这个连接已经建立,如果client端向server写数据,server端将以RST包响应,方能感知到server的错误。

Q5:   三次握手过程中有哪些不安全性

  1)伪装的IP向服务器发送一个SYN请求建立连接,然后服务器向该IP回复SYN和ACK,但是找不到该IP对应的主机,当超时时服务器收不到ACK会重复发送。当大量的攻击者请求建立连接时,服务器就会存在大量未完成三次握手的连接,服务器主机backlog被耗尽而不能响应其它连接。即SYN泛洪攻击 
  防范措施: 
  1、降低SYN timeout时间,使得主机尽快释放半连接的占用 
  2、采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文 
  3、在网关处设置过滤,拒绝将一个源IP地址不属于其来源子网的包进行更远的路由 
  2)当一个主机向服务器发送SYN请求连接,服务器回复ACK和SYN后,攻击者截获ACK和SYN。然后伪装成原始主机继续与服务器进行通信

 

Q6:哪些应用层协议是基于TCP的,哪些是基于UDP的

TCP: FTP、HTTP、Telnet、SMTP、POP3、HTTPS

UDP:DNS、SNMP、NF

待补充。。。
 

### 关于TCP协议的面试题目整理 #### TCP连接管理 - **三次握手** - 描述TCP建立连接的过程及其必要性。为什么需要三次而不是两次握手? - **四次挥手** - 解释为何关闭一个TCP连接需要四步操作,以及每一步的具体含义。 #### 超时重传机制 - 当TCP保活的探测报文发送给对端后如果长时间未收到回复,则认为该连接已失效[^1]。如何设置合理的超时时间以平衡效率与可靠性? #### 流量控制与拥塞控制 - **滑动窗口** - 讲解TCP中的流量控制是如何通过调整接收方通告窗口大小实现的。 - **慢启动、快速重传算法** - 探讨这些策略对于防止网络拥堵的作用及其实现方式。 #### 数据传输特性 - **确认应答** - 发送方发出的数据包被成功接收到之后,接收方会自动返回ACK信号告知对方数据已被正确接收[^4]。这种机制怎样帮助维持稳定可靠的通信链路? - **乱序处理** - 如果在网络环境中频繁发生分组错位现象,有哪些方法可以用来解决这个问题并确保最终按顺序重组消息? #### 安全性和性能优化 - 对于私有IP地址范围内的主机(如`10.x.x.x`, `172.16-31.x.x`, 或者`192.168.x.x`),它们之间可以直接互相访问吗?如果是跨公网的话又该如何处理呢[^3]? #### 协议栈理解 - 网络协议栈由多个层次组成,各司其职共同完成复杂的通讯任务。请列举出主要几层名称,并简述各自功能特点[^2]。 ```python import socket def create_tcp_socket(): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print("Socket created successfully.") return sock except socket.error as err: print(f"Socket creation failed with error {err}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值