1.TCP 头格式有哪些?
序列号:
在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。
用来解决网络包乱序问题。
确认应答号:
指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。
用来解决丢包的问题。
2.为什么需要 TCP 协议? TCP 工作在哪一层?
IP 层是「不可靠」的,它不保证网络包的交付;需要保障网络数据包的可靠性,那么就需要由上层(传输层)的 TCP 协议来负责。
TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。
3.什么是 TCP ?
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议
面向连接:一定是「一对一」才能连接
可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端
4.什么是 TCP 连接?
用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket、序列号和窗口大小称为连接
建立一个 TCP 连接是需要客户端与服务端达成三个信息的共识:
Socket:由 IP 地址和端口号组成
序列号:用来解决乱序问题等
窗口大小:用来做流量控制
5.如何唯一确定一个 TCP 连接呢?
TCP 四元组可以唯一的确定一个连接,四元组包括如下:
源地址
源端口
目的地址
目的端口
源地址和目的地址的字段(32 位)是在 IP 头部中,作用是通过 IP 协议发送报文给对方主机。
源端口和目的端口的字段(16 位)是在 TCP 头部中,作用是告诉 TCP 协议应该把报文发给哪个进程
6.UDP 和 TCP 有什么区别呢?分别的应用场景是?
UDP利用 IP 提供面向「无连接」的通信服务,头部只有 8 个字节(64 位)
1.目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程。
2.包长度:该字段保存了 UDP 首部的长度跟数据的长度之和。
3.校验和:校验和是为了提供可靠的 UDP 首部和数据而设计,防止收到在网络传输中受损的 UDP 包
TCP 和 UDP 区别:
- 连接
TCP 是面向连接的传输层协议,传输数据前先要建立连接。
UDP 是不需要连接,即刻传输数据
- 服务对象
TCP 是一对一的两点服务,即一条连接只有两个端点。
UDP 支持一对一、一对多、多对多的交互通信
- 可靠性
- TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达 2.UDP 不保证可靠交付数据。
但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议
- 拥塞控制、流量控制
TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率
- 首部开销
1.TCP 首部长度较长,最小为 20 个字节,最长80字节。
2.UDP 首部只有 8 个字节,并且是固定不变的,开销较小
- 传输方式
TCP 是流式传输,没有边界,但保证顺序和可靠。
UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序
- 分片不同
1.TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
2.UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层
TCP 和 UDP 应用场景:
TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
FTP 文件传输;
HTTP / HTTPS;
UDP 面向无连接,它可以随时发送数据, 处理既简单又高效,因此经常用于:
包总量较少的通信,如 DNS 、SNMP 等;
视频、音频等多媒体通信;
广播通信;