TCP/IP协议栈其他文章
网络参考模型
TCP/IP协议栈—应用层
TCP/IP协议栈—英特网层
TCP/IP协议栈—网络接入层
TCP/IP协议栈—传输层
- 传输层协议接收来自应用层协议的数据,封装上相应的传输层头部,帮助其建立“端到端”(Port to Port)的连接。
- 传输层的PDU被称为Segment(段)。
PDU:协议数据单元
面向连接就像是单对单拨号打电话,面向无连接就像是发送消息,无论对方是否在线
面向连接功能更多,传输过程中更可靠;UDP简单快捷
TCP和UDP—报文格式
可选项Options: 标准头部外的其他功能
Data: 承载的应用层的数据
TCP头部每行4个字节,共有5行
1Byte(字节)=8bit,bit只能取0和1,1代表开,0代表关
Source port 源端口 16bit(发起数据的应用程序)(随机)。
Destination port 目标端口 16bit(接收数据的应用程序)(固定)。
取值范围均为216=65536(0-65535)。
0-1023端口为知名端口
除了知名端口号外,还有一些端口号也被正式注册,称为注册端口。它们分布在 1024 ~ 49151 之间。3389是注册端口。
Sequence number 序列号,TCP的可靠性的第一个体现,不怕乱序
Acknowledgement number 确认号,可靠性的第二个体现,不怕丢包
ACK(确认应答) 的取值总是序列号+1,
TCP 通过确认应答实现可靠的数据传输。当发送端将数据发出后,会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。否则,数据可能已经丢失。在一定时间内没有等到确认应答,发送端会认为数据已经丢失,并进行重发。这样,即使有丢包,仍能保证数据到达对端,实现可靠传输。**未收到确认应答,不一定是数据丢失。**也可能对端已经收到数据,返回的确认应答在途中丢失,也会导致发送端重发。此外,也可能确认应答延迟到达,发送端重发数据后才收到。
Control bits 控制位
-
Urgent位,紧急指针位,此控制位流生效时,Urgent生效
-
有一位是ack位,如果是1表示ack值生效
-
Push位,TCP可靠性第三点,跳过缓冲区尽快将报文交给应用层
-
Reset,重置位,强制断开连接,其中支持重传(通过序列号和ACK)是第四大可靠性
-
SYN,三次握手(双向可靠的连接)的标识。在数据通信前,发送一个 SYN 包作为建立连接的请求。如果对端发来确认应答,则认为可以开始数据通信。如果对端的确认应答未能到达,就不会进行数据通信。在通信结束时,会使用 FIN 包进行断开连接的处理。
SYN 包和 FIN 包是通过 TCP 头部的控制字段来管理 TCP 连接。一个连接的建立与断开,正常过程至少需要来回发送 7 个包才能完成。建立一个 TCP 连接需要发送 3 个包,这个过程叫作三次握手。断开一个 TCP 连接需要发送 4 个包,这个过程也称作四次挥手。创建一个 TCP 连接,会产生一个 32 位随机序列号,因为每一个新的连接使用一个新的随机序列号。
Header Length 头部长度为20时说明没有可选项
Reserved 保留位
Window 窗口大小,流控功能
Checksum 检验和,防止数据在传递过程中被破坏、篡改,一种校验机制,第五大可靠性
UDP报文简单、快捷,相对于TCP更安全一些
三次握手
主机 A 想向主机 B 发送数据,TCP 模块通过三次握手建立连接 TCP 会话。
三次握手,是指 TCP 会话建立过程中共交换了 3 个 TCP 控制段,它们分布是 SYN 段、SYN + ACK 段、ACK 段。详细过程如下:
- 发送端主机 A 向接收端主机 B 发出 SYN 段,表示发起建立连接请求,同时把自己的状态告诉主机 B 。将段的序列号设为 a ,SYN 置位,表示 SYN 管理段。
- 主机 B 收到连接请求后,回应 SYN + ACK 段,将序列号设为 b ,确认号设为 a + 1 ,同时将 SYN 和 ACK 置位。
- 主机 A 收到主机 B 的连接确认后,发送 ACK 段再次进行确认,确认会话的建立,将 ACK 置位。主机 A 收到确认号是 a + 1 、序列号是 b 的段后,发送序列号为 a + 1 、确认号为 b + 1 的段进行确认。
- 主机 B 收到确认报文后,连接建立。双方可以开始传输数据。
经过 3 次握手后,A 和 B 之间其实是建立了两个 TCP 会话,一个是从 A 指向 B 的 TCP 会话,另一个是从 B 指向 A 的 TCP 会话。A 发送的 SYN 段,表示 A 请求建立一个 从 A 指向 B 的 TCP 会话,目的是控制数据能够正常、可靠的从 A 传输到 B 。B 在收到 SYN 段后,会发送一个 SYN + ACK 段作为回应。SYN + ACK 的含义是:B 一方面同意了 A 的请求,另一方面也请求建立一个从 B 指向 A 的 TCP 会话,这个会话目的是控制数据能够正确、可靠的从 B 传输到 A 。A 收到 SYN + ACK 段后,回应一个 ACK ,表示同意 B 的请求。
四次挥手
当 TCP 数据段的传输结束时,双方都需要发送 FIN 段和 ACK 段来终止 TCP 会话。这个方式叫做四次挥手,详细过程如下:
- 主机 A 想要终止连接,发送序列号为 p 的段,FIN 置位,表示 FIN 管理段。
- 主机 B 收到主机 A 发送的 FIN 段后,发送 ACK 段,确认号为 p + 1 ,同时关闭连接。
- 主机 B 发送序列号为 q的段,FIN 置位,通知连接关闭。
- 主机 A 收到主机 B 发送的 FIN 段后,发送 ACK 段,确认号为 q + 1 ,同时关闭连接。TCP 连接至此结束。
B 收到主机 A 发送的 FIN 段后,发送 ACK 段,确认号为 p + 1 ,同时关闭连接。
5. 主机 B 发送序列号为 q的段,FIN 置位,通知连接关闭。
6. 主机 A 收到主机 B 发送的 FIN 段后,发送 ACK 段,确认号为 q + 1 ,同时关闭连接。TCP 连接至此结束。
TCP/IP协议栈其他文章
网络参考模型
TCP/IP协议栈—应用层
TCP/IP协议栈—英特网层
TCP/IP协议栈—网络接入层