传输层的作用
首先在讲TCP/IP协议族之前,我们先来了解一下传输层。
- 传输层提供面向连接和无连接的服务(TCP/UDP)
- 维护连接状态
- 对数据进行分段和封装(网络只能发送长度有限的数据包)
- 多路复用(端口号的概念呢,一个IP地址对应多个应用程序或服务)
- 可靠传输(对错误、丢失、乱序的包检测纠错)
- 流量控制(对接收方的数据接收速率进行协调,避免浪费)
什么是TCP、UDP
TCP(Transfer Control Protocol)传输控制协议
UDP(User Datagram Protocol)用户数据报文协议
两者都是TCP/IP协议族中最重要协议之一
TCP是面向连接的可靠传输层协议,一对一的通信
UDP是无连接的传输协议,我们看视频什么的都是基于UDP流试传输数据
TCP的特点
- 三次握手
通过三次握手来建立可靠连接
- 端口号
可以用端口号来标识上层协议和服务,实现网络多路复用
- 完整性校验
(Checksum)校验和计算,保证了接受方能检测到传输过程中可能出现的差错
- 确认机制
对于正确收到的数据包接收方通过应答通过发送方,超过一段时间没有收到应答则重传
- 序列号
所有的数据都拥有唯一的序列号,通过序列号来将数据进行确认、乱序重排
- 窗口机制
可以通过调节抽象的窗口,来限制接收方最大的传输速率,从而控制数据流量
TCP报文格式
依旧还是老惯例,我们逐层来解释他的意思和作用:
- Source Port
源端口 - 16Bit
和源IP组合起来使用,对报文表示返回地址
- Destination Port
目的端口 - 16Bit
对应接受方计算机上的服务、应用程序的端口
- Sequence Number
序列号 - 32Bit
用来标识源端设备向目的端发送的数据的编号,(相当于一个计数器)
- Acknowledgement
确认号 - 32Bit
用来标识请求对方下次发送的数据报文的编号
- Data Offset
数据偏移 - 4Bit
用来标识分片后的数据,在源数据中的位置
- Reserved
保留位 - 6Bit
暂时还没有其他作用,留着占位,以便以后新增内容
- Control
控制位 - 6Bit
控制着六个功能的开关
分别是URG
ACK
PSH
RST
SYN
FIN
- URG
紧急指针
- ACK
确认字段标志
- PSH
提交缓存数据
- RST
复位开关(可以用来强行中断TCP连接)
- SYN
握手开关
- FIN
结束开关
- Windows
窗口尺寸 - 16Bit
用于标识自己期望收到的数据字节
- Checksum
校验和 - 16Bit
对源数、目的据计算产生的结果,源目数据计算出来的应该是相等,数据才是完整的
- Urgent Pointer
紧急指针 - 16Bit
- Options
可选项
- Padding
填充
加入额外的数据,保证TCP头部是32位的整倍数
端口号的概念
IP网络中,通常一个IP地址标识一个主机,但是主机上有多个进程服务要被其他网络所访问,要标识这些程序、服务就引入了TCP/UDP端口号,用来标识程序或服务
协议号TCP:6
协议号UDP:17
端口的取值范围是0~65535
其中0-1023端口有IANA号码分配机构统一管理
1024-65535为我们的随机端口
几个常见应用的端口号:Telnet:23/TCP
FTP:20/21/TCP
(20数据传输,21连接控制)HTTP:80/TCP
HTTPS:443/TCP
SMTP:25/TCP
DNS:53/UDP
TFTP:69/UDP
SNMP:161/UDP
BootP:67/68/UDP
TCP三次握手
TCP通过三次握手来建立可靠连接
- 由发起方 HostA 向被叫方 HostB 发出连接请求。将段的序列号标为 a,SYN 置位,由于是双方发的第一个包,ACK 无效。
- HostB 收到连接请求后,读出序列号为 a,发送序列号为 b 的包,同时将 ACK 置为有效,将确认号置为 a+1,同时将 SYN 置位。
- HostA 收到 HostB 的连接确认后,对该确认再次作确认。HostA 收到确认号为 a+1、序列号为 b 的包后,发送序列号为 a+1、确认号为 b+1 的段进行确认
- HostB 收到确认报文后,连接建立
PS:看文字容易搞混,最好还是看流程图,在配合抓包测试
TCP的四次挥手
TCP在控制段中开启FIN功能来关闭一个TCP连接
- HostA 要求终止连接,发送序列号为 p 的段,FIN 置为有效,同时确认此前刚收到的
段。 - HostB 收到 HostA 发送的段后,发送 ACK 段,确认号为 p+1,同时关闭连接。
- HostB 发送序列号为 q 的段,FIN 置为有效,通知连接关闭。
- HostA 收到 HostB 发送的段后,发送 ACK 段,确认号为 q+1,同时关闭连接
还是和三次握手相似,如果要强制关闭连接,只需要开启RST功能即可,无需进行四次挥手就可断开连接。
TCP重传机制
当其中一个数据丢失时,被接收方只需要向接收方单独发送丢失数据的请求即可
TCP滑动窗口机制
通过告知对方本机数据的接收能力,来实现对数据流量的控制
当TCP发送重传后,会主动缩减窗口尺寸
当TCP稳定传输时,会逐渐增大窗口尺寸
UDP报文格式
相比于TCP而言UDP的报文格式就简单了许多
这里我们只对新出现的条目做解释,其他条目和TCP的解释一样
- Length
长度 - 16Bit
里面包含了UDP头部和数据在整改UDP数据报文中的长度,单位字节
TCP与UDP的对比
TCP更适用于对于数据完整性要求较高,对数据传输延低的场景
UDP更适用于对传输延时高,但对数据完整性要求较低的场景(视频流的传输,音频流的传输都是基于UDP)