Blog.011 传输层协议详解
本章目录
1. 传输层协议的分类
2. TCP协议
2.1 TCP协议的概念
2.2 TCP报文段
3. TCP连接
3.1 TCP建立连接·三次握手
3.2 TCP断开连接·四次挥手
3.3 TCP半关闭、半连接、半打开的概念
4.常用的TCP端口号及其功能
5. UDP协议
5.1 UDP协议的概念
5.2 UDP报文的首部格式
6. 常用的UDP端口号及其功能
传输层是一种只有主机才拥有的层次,使用网络层的服务为应用层提供通信服务。传输层提供进程与进程之间的通信,有两种协议:
(1)TCP(Transmission Control Protocol)传输控制协议;
(2)UDP(User Datagram Protocol)用户数据报协议。
(1)TCP是面向连接的、可靠的进程到进程通信的协议;
(2)TCP提供全双工服务,即数据可在同一时间双向传输;
(1)TCP将若干个字节构成一个分组,叫报文段(Segment);
(2)TCP报文段封装在IP数据报中。

- 序号:发送端为每个字节进行编号,便于接收端正确重组;
- 确认号:用于确认发送端的信息;
- 窗口大小:用于说明本地可接受数据段的数目,窗口大小是可变的;
- SYN:同步序号位,TCP需要建立连接时将该值设为1;
- ACK:确认序号位,当该位为1时,用于确认发送方的数据;
- FIN:当TCP断开连接时该位为1。

- 第一次握手:PC1 给 PC2 发一个 SYN 报文。
- 首部的同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号。
- 第二次握手:PC2 收到 PC1 的 SYN 报文之后,会以自己的 SYN 报文作为应答,同时会把 PC1 的 ISN + 1 作为ACK 的值,表示自己已经收到了 PC1 的 SYN。
- 在确认报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y。
- 第三次握手:PC1 收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把 PC2 的 ISN + 1 作为 ACK 的值,表示已经收到了 PC2 的 SYN 报文。
- 确认报文段ACK=1,确认号ack=y+1,序号seq=x+1(初始为seq=x,第二个报文段所以要+1),ACK报文段可以携带数据,不携带数据则不消耗序号。
3.2 TCP断开连接·四次挥手★★★

- 第一次挥手:PC1 发送一个 FIN 报文。
- 即发出连接释放报文段(FIN=1),并停止再发送数据,主动关闭TCP连接,等待 PC2 的确认。
- 第二次挥手:PC2 收到 FIN 之后,会发送 ACK 报文,表明已经收到 PC1 的报文了。
- 即 PC2 收到连接释放报文段后即发出确认报文段(ACK=1),此时的 TCP 处于半关闭状态,PC1 到 PC2 的连接释放。PC1 收到 PC2 的确认后,等待 PC2 发出的连接释放报文段。
- 第三次挥手:如果 PC2 也想断开连接了,和 PC1 的第一次挥手一样,发送 FIN 报文。
- 即 PC2 没有要向 PC1 发出的数据,PC2 发出连接释放报文段(FIN=1,ACK=1),等待 PC1 的确认。
- 第四次挥手:PC1 收到 FIN 之后,一样发送一个 ACK 报文作为应答,需要过一阵子以确保 PC2 收到自己的 ACK 报文之后才会关闭连接,待 PC2 收到 ACK 报文之后,关闭连接。
(1)半关闭:当TCP链接中A向B发送FIN请求关闭,另一端B回应ACK之后,并没有立即发送FIN给A,A处于半连接(半开关)状态,此时A可以接收B发送的数据,但是A已经不能再向B发送数据。
(2)半连接:发生在TCP三次握手中,如果A向B发起链接,B也按照正常情况响应了,但是A不进行三次握手,这就是半连接。
- 半连接攻击(SYN攻击):半连接会造成B分配的内存资源就一直这么耗着,直到资源耗尽。
(3)如果一方关闭或者异常关闭(断电、断网),而另一方并不知情,这样的连接称之为半打开。处于半打开的连接,如果双方不进行数据通信,是发现不了问题的,只有在通信真正察觉到这个连接已经处于半打开状态,如果双方不传输数据的话,仍处于连接状态的一方就不会检测另外一方已经出现异常。
- 解决方法:引入心跳机制就可以察觉半打开。如果需要发数据的状态下,一方收到以后发现此连接并不存在,就会恢复RST包告知,即重新建立连接。
| 端口 | 协议 | 说明 |
| 21 | FTP | FTP服务器所开放的控制端口 |
| 23 | TELNET | 用于远程登录,可以远程控制管理目标计算机 |
| 25 | SMTP | SMTP服务器开放的端口,用于发送邮件 |
| 80 | HTTP | 超文本传输协议 |
| 110 | POP3 | 用于邮件的接收 |
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
(1)无连接、不可靠的传输协议
(2)花费的开销小

(1)源端口号:表示发送端端口号,字段长为16位。没有源端口时该字段的值为0,可用于不需要返回值的通信中。
(2)目标端口号:表示接收端端口号,字段长度为16位。4
(3)UDP长度:该字段保存了UDP首部的长度跟数据的长度之和。
(4)校验和:校验和是为了提供可靠的UDP首部和数据而设计的。
| 端口 | 协议 | 说明 |
| 69 | TFTP | 简单文件传输协议 |
| 111 | RPC | 远程过程调用 |
| 123 | NTP | 网络时间协议 |
浙公网安备 33010602011771号