1. 传输层的两个协议
- TCP(Transmission Control Protocol)传输控制协议
- UDP (User - -Datagram Protocol )用户数据报协议
2. UDP 报文格式
- UDP是无连接的,减少了建立和释放连接的开销
- UDP尽最大能力交付,不保证可靠交付 因此不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)
- 端口占两个字节 可以推测出端口的取值范围是0~65535
- 客户端的源端口是临时开启的随机端口
- 目的端口是应用程序指定的(可利用端口 区分程序的不同服务)
- 防火墙可以设置开启和关闭某些端口来提高安全性
- UDP 长度
- 占16 首部的长度 + 数据的长度
- 检验和的计算内容:伪首部 + 首部 + 数据
- 伪首部:仅在计算检验和时起作用,并不会传递给网络层
- 伪首部:仅在计算检验和时起作用,并不会传递给网络层
3. TCP
3.1 TCP 数据格式
- TCP首部占20字节
3.2 格式详解
- 序号
- 占四个字节
⽤来解决⽹络包乱序问题 。在建立连接后 代表传给对方TCP数据部分的第一个字节的编号 默认从1开始 但是实际上存储的是:默认编号+相对编号
为什么要有这个编号呢? 为了告诉对方下次你应该给我发的首字节编号为多少的数据段。
传输层数据长度可根据 网络层的总长度(在网络层首部可直接读取)-传输层的首部长度(8个字节)= 数据长度 近而可以求初当前接受到数据部分多大 可求出下次需要发送的初始seq
- 确认号(确认应答号)
- 占四个字节 ⽤来解决不丢包的问题。 。在建立连接后,确认号代表期望对方下一次传过来的TCP数据部分的第一个字节的编号 。 当ACK=1时,确认号字段才有效。
- 窗口(Window)
- 占2字节 这个字段有流量控制功能,用以告知对方下一次允许发送的数据大小(字节为单位)
为什么要有个窗口呢?
如果没有窗口 每发一段 就需要给对方回应一次那么通信效率极低。所以为了提高通信效率 ,每次多发几段 给对方再相应一次。那么每次发几段合适呢?这时候就有了窗口的概念。告知对方下次允许发送的数据大小。窗⼝的实现实际上是操作系统开辟的⼀个缓存空间,发送⽅主机在等到确认应答返回之前,必须在缓冲 区中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。
- 数据偏移: 首部长度
- 标志位
- URG=1 时 紧急指针才有效 表明当前报文段中有紧急数据 应优先尽快传送
- ACK =1 时 确认号字段才有效
- PUSH
- RST 当RST=1 时 表明连接中出现严重差错 必须释放连接 然后再重新建立连接
比如 数据包重传多次还失败 此时就会发送rst报文
- SYN 当SYN=1 ACK=0 表明这是一个建立连接的请求 若对方同意建立连接 则回复SYN=1 ACK =1
- FIN =1 表示数据已经发送完毕 要求释放连接
3.3 TCP的特点
-
连接管理
- 建立连接
- 释放连接
-
可靠传输
-
流量控制
-
拥塞控制<