TCP/IP面试要点浅析

本文深入探讨TCP/IP面试的重点,包括TCP的基本概念、连接建立、连接断开及实践应用。详细阐述TCP头部格式、三次握手与四次挥手的过程、TCP连接状态、以及Linux下查看TCP状态的方法。同时对比了TCP与UDP的区别,解析了SYN攻击及其防御策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP/IP面试要点浅析

一.TCP基本认识

1.TCP头部格式

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

2.什么是TCP?什么是TCP连接?如何确定一个TCP连接?

什么是TCP?

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

  • 面向连接:一对一的连接,不能向UDP那样一对多
  • 可靠的:无论网络怎么变化,TCP都保证一个报文一定能到达接收端
  • 基于字节流:消息是无边界的,无论消息多大都可以传输,并且消息是有序的,当前一个消息没有收到的时候,即使先收到了后面的字节,那么也不能扔给应用层去处理,同时对重复的报文会自动丢弃。

什么是TCP连接?

TCP连接:用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合叫做连接(包括socket,序列号,窗口大小)

如何确定一个TCP连接?

四元组

  • 源地址
  • 源端口
  • 目标地址
  • 目标端口

源地址和目标地址是在IP头部中,作用是通过IP协议发送报文给对方主机

源端口和目标端口是在TCP头部中,作用是告诉TCP协议应该把报文发送给哪个进程

3.为什么需要TCP?TCP工作在哪一层?

TCP工作在传输层

因为网络层是不可靠的,如果需要保证网络数据包的可靠性,那么就需要有传输层的TCP来保证

因为TCP是一个工作在传输层的可靠数据传输服务,他能确保接收端接收的网络包是无损坏,无间隔,非冗余和按序的

4.TCP最大连接数如何计算?实际受哪些因素影响?

理论上,TCP最大连接数=客户端IP数(2的32次方)*客户端端口数(2的16次方)

实际上TCP的最大连接数远不能达到理论上限,受以下因素影响:

  • 文件描述符fd数量限制:每个tcp连接都是一个文件,Linux对文件描述符做了三个方面的限制
    • 系统级:当前系统可打开的fd最大数量
    • 用户级:当前用户可打开的fd最大数量
    • 进程级:当前进程可打开的fd最大数量
  • 内存大小限制:每个tcp都要占用一定内存,内存有限,被占满后会OOM

5.UDP和TCP有什么区别?分别对应什么应用场景?

区别如下:

1.连接

  • TCP传输数据前要先建立连接
  • UDP不需要建立连接,即刻传输数据

2.服务对象的数量

  • TCP仅支持一对一
  • UDP支持一对一,一对多,多对多

3.可靠性

  • TCP是可靠的
  • UDP是不可靠的,尽最大努力交付

4.控制机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值