为什么现在称为IPV4?
TCP/IP协议从ARPA阿帕网发展而来,TCP协议早期版本是不分层的,直到第四版才开始分层实现,拆出IP层,所以称为IPV4
TCP 协议的特点
- 点对点(不能广播,多播),面向连接
- 双向传递(全双工) => TCP 是全双工的,但是
HTTP1.1是请求应答模式 - 字节流:打包成报文段,保证有序接收,重复报文自动丢弃
- 不维护应用报文的边界(对比
HTTP``GRPC) - 不强制要求应用必须离散的创建数据块,不限制数据块大小
- 不维护应用报文的边界(对比
- 流量缓冲:解决速度不匹配问题
- 可靠的传输服务(保证可达,丢包时通过重发进而增加时延实现可靠性)
- 拥塞控制
TCP 的任务
- 主机内的进程寻址,通过报文中的端口号
- 创建,管理和终止连接
- 处理并将字节流打包成报文段
- 传输数据
- 保持可靠性和传输质量
- 流控制和拥塞控制
TCP 报文
IP 报文

可以看出IP主要是寻址功能,报文中有源地址和目标地址
UDP 报文

UDP在IP寻址成功的基础上通过端口Port找到进程,从而把数据传输到进程UDP不管数据是否送到,所以报文非常简单
三次握手
三次握手是为了干什么?
- 同步
Sequence序列号,初始序列号ISN:Initial Sequence Number -
三次握手过程
首先客户端随机初始化请求序列号,发起
SYN请求(所谓SYN请求指的是:TCP报文中Flags标志位中SYN所在标志位为1的请求),客户端进入SYN-SENT状态,等待服务端响应- 服务端启动之后就一直处于
LISTEN状态,收到客户端请求之后,随机初始化请求序列号,并在客户端请求序列号的基础上+1作为应答序列号,发起SYN+ACK的响应(所谓SYN+ACK的响应指的是响应报文中Flags标志位SYN和ACK都为1),发出响应之后进入SYN-RECEIVED状态 - 客户端收到
SYN+ACK响应之后,再次发起ACK的请求,服务端收到之后连接建立,客户端和服务端都进入ESTABLISHED状态为什么三次握手过程中
假如ISN是随机的?ISN不是随机的,是可预测的,那么会发生什么呢?
场景如下:
C 冒充 A 的IP发起 B 服务器的连接请求,那么 C 预测到ACK之后虽然未收到B的SYN+ACK请求,但是仍可发起ACK请求,连接建立
为什么握手过程是三次?
首先TCP是可靠的全双工服务
要保证可靠:就需要一应以答(不然可能丢包了无法发现),这就是两次
比如
客户端说:我要连接啦
服务端说:你连吧
要保证双工:客户端来一次,服务端也需要来一次,就支持双工了
所以握手请求是四次,但是TCP为了性能优化,把服务器的响应和请求合并成了一次,所以就是三次握手
