1.TCP基本认识
序列号:建立连接时候,计算机随机生成的数作为初始值,通过SYN发送,每发送一次累加一次该数据的字节数,用来解决网络包乱序问题。
确认应答号:指期望下一次收到的数据包序列号,客户端收到表示在该序号之前的数据都已经全部送达。用来解决不丢包问题。
控制位:
- ACK:表示确认收到数据,除了建立连接的时候,其他时候都为1。
- RST:出现异常需要中断TCP连接。
- SYN:表示请求建立连接。
- FIN:表示请求断开连接。
2.为什么需要TCP协议?TCP工作在哪一层
网络层IP协议是不可靠的,它不能保证数据包的完整性。
TCP工作在传输层的可靠传输服务。它能确保接收端收到的网络包是无损坏的、无间隔的、非冗余的。
3.什么是TCP?
TCP是面向连接的、可靠的、基于字节流的传输层通信协议。
面向连接的:是指它只能一对一连接,不能像UDP那样一对多。
可靠的:是指TCP协议可以确保每个数据都到达。不像UDP那样不确保数据到达。
基于字节流的:是指TCP协议是按数据块发送的,不区分边界,而UDP是一个报文一个报文发送的。所以TCP可能会产生粘包和乱序问题。
4.什么是TCP连接
TCP连接包括Socket、序列号和窗口大学这些用于保证可靠性和流量控制的信息。
Socket:IP地址和端口号构成
序列号:用来解决乱序问题的
窗口大小:用来做流量控制
5.如何确定唯一的TCP连接呢
TCP四元组:
- 源地址
- 源端口号
- 目标地址
- 目标端口号
6.有一个IP的服务器监听了一个端口,它的TCP的最大连接数是多少?
最大TCP连接数=客户端的IP数X客户端的端口数
对于IPv4来说,客户端的IP数为2的32次方,客户端的端口数最多为2的16次方。
所以TCP最大连接数约为2的48次方。
因为文件描述符限制和内存限制,所以TCP连接数远远不能达到理论上限。
7.UDP和TCP有什么区别呢?分别的应用场景是?
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。
UDP协议很简单,头部只有8个字节(64位),UDP的头部格式如下:
- 目标和源端口:主要是告诉UDP协议应该把报文发给哪个进程
- 包长度:该字段保存了UDP首部的长度和数据长度之和。
- 校验和:校验和是为了提供可靠的UDP首部和数据而设计
TCP和UDP区别:
- 连接
- TCP是面向连接的传输层协议,传输数据前先要建立连接
- UDP是不需要连接,即刻传输数据
- 服务对象
- TCP是一对一的两点服务,即一条连接只有两个端点
- UDP支持一对一、一对多、多对多的交互通信
- 可靠性
- TCP是可靠交付数据,数据可以无差错、不丢失、不重复、按需到达
- UDP是尽最大努力交付,不保证可靠交付数据
- 拥塞控制、流量控制
- TCP有拥塞控制和流量控制机制,保证数据传输的安全性
- UDP则没有,即使网络非常拥堵了,也不会影响UDP的发送速率
- 首部开销
- TCP首部长度较长,会有一定的开销,首部在没有使用选项字段时是20个字节,如果使用了选项字段则会变长的。
- UDP首部只有8个字节,并且是固定不变的,开销较小。
- 传输方式
- TCP是流式传输,没有边界,但保证顺序和可靠
- UDP是一个包一个包的发送,是有边界的,但可能会丢包和乱序
- 分片不同
- TCP的数据大小如果大于MSS大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装TCP数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
- UDP的数据大小如果大于MTU大小,则会在IP层进行分片,目标主机收到后,在IP层组装完数据,接着再传给传输层,但是如果中途丢了一个分片,在实现可靠传输的UDP时则需要重传所有的数据包,这样传输效率非常差,所以通常UDP的报文应该小于MTU
注:MSS是基于TCP层的最大报文长度
MTU是基于IP层的最大传输单元
MTU>>MSS
TCP和UDP的应用场景:
由于TCP是面向连接,能保证数据的可靠性交付,因此经常用于:
- FTP文件传输
- HTTP/HTTPS
由于UDP面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于: - 包总量较少的通信,如DNS、SNMP等
- 视频、音频等多媒体通信
- 广播通信
8.为什么UDP头部没有首部长度字段?而TCP头部有首部长度字段呢?
原因是TCP有可变长的选项字段,而UDP头部长度则是不会变化的,无需多一个字段去记录UDP的首部长度。
9.为什么UDP头部有包长度,而TCP头部没有包长度呢?
为了补全UDP首部长度是4字节的整数倍,才补充了包长度字段。