TCP基本认识
1、TCP头格式
序列号:用来解决网络包乱序问题。
确认应答号:用来解决不丢包的问题。
TCP数据长度 = IP总长度 - IP首部长度 - TCP首部长度。
2、什么是TCP
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。
- 面向连接:一定是「一对一」才能连接;
- 可靠的:TCP 都可以保证一个报文一定能够到达接收端;
- 字节流:消息是「没有边界」的,有序的,当「前一个」消息没有收到的时候,即使它先收到了后面的字节,那么也不能扔给应用层去处理,同时对「重复」的报文会自动丢弃。
3、TCP连接
用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接。
- 建立一个 TCP 连接是需要客户端与服务器端达成上述三个信息的共识:
Socket:由 IP 地址和端口号组成。 - 序列号:用来解决乱序问题等。
- 窗口大小:用来做流量控制。
4、如何唯一确定一个 TCP 连接呢?
TCP 四元组可以唯一的确定一个连接,四元组包括如下:
- 源地址 目的地址 :IP 头部中,作用是通过 IP 协议发送报文给对方主机。
- 源端口 目的端口 :TCP 头部中,作用是告诉 TCP 协议应该把报文发给哪个进程。
5、TCP 的最大连接数
最大连接数 = 客户端IP数 (2^32)* 客户端的端口数(2^16)
限制条件使得达不到理想上限:
- 文件描述符限制:Socket 都是文件,所以首先要通过
ulimit
配置文件描述符的数目; - 内存限制:每个TCP连接占用一定内存,操作系统内存有限;
6、UDP 和 TCP 有什么区别呢?分别的应用场景是?
UDP 不提供复杂的控制机制,利用 IP 提供面向「无连接」的通信服务。
- 目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程。
- 包长度:该字段保存了 UDP 首部的长度跟数据的长度之和。
- 校验和:校验和是为了提供可靠的 UDP 首部和数据而设计。
6.1区别:
1、TCP面向连接,传输之前建立连接(三次握手),UDP不需要连接,直接传输,
2、TCP是一对一服务; UDP支持一对一,一对多,多对多。
3、TCP可靠交付数据,数据可以无差错、不丢失、不重复、按需到达;UDP只是尽力而为。
4、TCP有拥塞控制和流量控制,保证数据安全性;UDP没有,网络非常拥堵了,也不会影响 UDP 的发送速率。
5、TCP首部在没有使用「选项」字段时是20个字节,如果使用了「选项」字段则会变长的;UDP只有8个字节,固定不变。
6、TCP流式传输,没有边界,保证顺序和可靠。UDP一个包一个包发送,有边界,可能丢包乱序。
6.2应用场景:
TCP:①FTP文件传输②HTTP/HTTPS。
UDP:①DNS②广播通信③多媒体通信。