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