脑图
>)
>)
>)
>)
---
正文
01 TCP 基本认识
> 瞧瞧 TCP 头格式
我们先来看看 TCP 头的格式-标注颜色的表示与本文关联比较大的字段-其他字段不做详细阐述。
>)TCP 头格式
序列号:在建立连接时由计算机生成的随机数作为其初始值-通过 SYN 包传给接收端主机-每发送一次数据-就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。
确认应答号:指下一次「期望」收到的数据的序列号-发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题。
控制位:
1 时-「确认应答」的字段变为有效-TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1 。1 时-表示 TCP 连接中出现异常必须强制断开连接。1 时-表示希望建立连-并在其「序列号」的字段进行序列号初始值的设定。1 时-表示今后不会再有数据发送-希望断开连接。当通信结束希望断开连接时-通信双方的主机之间就可以相互交换 FIN 位置为 1 的 TCP 段。> 为什么需要 TCP 协议?TCP 工作在哪一层?
IP 层是「不可靠」的-它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。
>)OSI 参考模型与 TCP/IP 的关系
如果需要保障网络数据包的可靠性-那么就需要由上层(传输层)的 TCP 协议来负责。
因为 TCP 是一个工作在传输层的可靠数据传输的服务-它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。
> 什么是 TCP ?
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。
>)
> 什么是 TCP 连接?
我们来看看 RFC 793 是如何定义「连接」的:
_Connections:_
_The reliability and flow control mechanisms described above require that TCPs initialize and maintain certain status information for each data stream._
_The combination of this information, including sockets, sequence numbers, and window sizes, is called a connection._
简单来说就是-用于保证可靠性和流量控制维护的某些状态信息-这些信息的组合-包括Socket、序列号和窗口大小称为连接。
>)
所以我们可以知道-建立一个 TCP 连接是需要客户端与服务器端达成上述三个信息的共识。
> 如何唯一确定一个 TCP 连接呢?
TCP 四元组可以唯一的确定一个连接-四元组包括如下:
>)
TCP 四元组
源地址和目的地址的字段(32位)是在 IP 头部中-作用是通过 IP 协议发送报文给对方主机。
源端口和目的端口的字段(16位)是在 TCP 头部中-作用是告诉 TCP 协议应该把报文发给哪个进程。
> 有一个 IP 的服务器监听了一个端口-它的 TCP 的最大连接数是多少?
服务器通常固定在某个本地端口上监听-等待客户端的连接请求。
因此-客户端 IP 和 端口是可变的-其理论值计算公式如下:

对 IPv4-客户端的 IP 数最多为 2 的 32 次方-客户端的端口数最多为 2 的 16 次方-也就是服务端单机最大 TCP 连接数-约为 2 的 48 次方。
当然-服务端最大并发 TCP 连接数远不能达到理论上限。
ulimit 配置文件描述符的数目;> UDP 和 TCP 有什么区别呢?分别的应用场景是?
UDP 不提供复杂的控制机制-利用 IP 提供面向「无连接」的通信服务。
UDP 协议真的非常简-头部只有 8 个字节( 64 位)-UDP 的头部格式如下:
>)UDP 头部格式
TCP 和 UDP 区别:
_1. 连接_
_2. 服务对象_
_3. 可靠性_
_4. 拥塞控制、流量控制_
_5. 首部开销_
20 个字节-如果使用了「选项」字段则会变长的。TCP 和 UDP 应用场景:
由于 TCP 是面向连接-能保证数据的可靠性交付-因此经常用于:
FTP 文件传输HTTP / HTTPS由于 UDP 面向无连接-它可以随时发送数据-再加上UDP本身的处理既简单又高效-因此经常用于:
DNS 、