一、运输层提供的服务
运输层的单位是报文段
(应用层:报文 、网络层:数据报、数据链路层:帧、物理层:比特)
1.UDP与TCP的区别
用户数据报协议UDP (User Datagram Protocol):
- 无连接,不可靠,但是首部小
- 尽力交付,无流量控制拥塞控制,所以多用于实时应用
- 面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部)
- 支持一对一、一对多、多对多
传输控制协议 TCP(Transmission Control Protocol):
- 面向连接,可靠(流量控制、拥塞控制)
- 全双工,只支持点对点通信
- 面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块)
2.端口
端口用来标识主机中的应用进程,只有本地意义,长度16bit,最多表示2^16=65536个端口
端口号:
使用环境 | 端口号 |
---|---|
服务端 | 熟知端口号(0-1023):给TCP/IP最重要的应用程序,如FTP 21 HTTP 80等 |
服务端 | 登记端口号(1024-49151):给不是熟知端口号的应用程序用,如mc服务器 25565等 |
客户端 | 端口号(49152-65535):客户进程运行时动态选择 |
套接字Socket:IP+端口号,唯一标识了网络中的一台主机和运行在主机上的某个进程。
3.实现复用分用和差错检测
端口的复用和分用
差错检测,运输层和数据链路层区别
- 运输层的差错检测的目的是无传输差错。即丢失乱序重复。
- 数据链路层的差错检测的目的是无比特差错。即多0少1这种,信号干扰导致的问题。
二、UDP协议 8B固定首部
UDP本身实现了很少的功能(复用分用和差错检测),可以理解成原封不动把报文交给了网络层
1.首部格式
2.伪首部——用于计算校验和 (12B)
伪首部只在计算校验和的时候出现,不向上向下传送
伪首部组成:
源IP,目的IP,全0,协议(TCP为6 UDP为17),UDP长度,如下图
3.UDP校验
三、TCP协议 20B固定首部
TCP因为要求可靠,所以需要流量控制和拥塞控制(重点)
TCP面向字节流,他会把应用层给的数据看成一个一个的字节
1.面向字节流
2.首部格式
序号seq 重要
表示当前报文段所发送数据的第一个字节的序号
tcp传送的字节流的每一个字节都是按顺序有序号编号的,这样就能确保数据的有序传输
确认号ack 重要
表示期望收到的下一个报文段的第一个字节的序号
如果确认号为N,那么就可以代表已经正确收到N-1为止的所有数据
数据偏移(首部长度) 4B为单位
占四位,最长四个1,即15*4B=60B。也就是代表TCP首部最长60字节
再复习一下IPv4的记忆口诀:一种八片的首饰
总长度单位:1B 片偏移:8B 首部长度:4B
IPv4首部固定20B (填充字段保证4B整数倍)
6个控制位
- URG:紧急位,表示高优先级的数据,不在缓存里排队,配合紧急指针使用
- ACK:确认位,用于表示确认号ack有效
- PSH:推送位,在接收方体现,高优先级数据赶紧交付给应用层
- RST:复位,表明TCP连接中出现严重差错,必须释放连接,再重新建立传输连接
- SYN:同步位,表示当前是一个连接请求/接受报文
- FIN:终止位,表示发送方数据发完,但仍然可以接收数据(半关闭状态)
窗口
指本报文段发送方可容纳的字节流,也就是允许对方发送的数据量
检验和
和UDP一样,加一个12B的伪首部,协议字段为6(代表TCP)
紧急指针
在控制位URG为1时有效,代表紧急数据的长度(紧急数据已经在缓存队列的头部了,所以只需要大小就能判断数据长度
选项
最大报文段长度MSS(拥塞窗口的单位)、窗口扩大、时间戳等等
3.TCP的可靠传输
保证接收的和发送的是一样的。
校验
与UDP一样加一个伪首部
滑动窗口
重传
- 超时重传:TCP采取自适应的算法,动态改变重传时间RTTs(加权平均往返时间)重传计时器
- 快速重传(冗余ACK)
4.TCP的连接管理
TCP的连接建立(三次握手
SYN洪范攻击
攻击者大量发送第一次握手(连接请求报文段)给服务器后,服务器发送ACK后攻击者不再确认,导致服务器一直处于挂起半连接状态,然后服务器还会持续发送ACK给攻击者,导致持续浪费服务器资源。可能导致无法对正常用户进行响应。
解决办法:SYN Cookie等
TCP的连接释放(四次挥手
等待2MSL的原因:时间等待计时器
①如果最后一次释放确认服务器没收到,那么服务器会重传一次Round3,保证客户发的最后一次ACK报文段能够到达服务器
②可以使本连接持续时间内产生的所有报文段消失,防止“已失效的连接请求报文段”
5.TCP的流量控制
TCP利用滑动窗口来进行流量控制
停止等待协议(性能差,信道利用率低
发送完一个数据报就停止发送,等待对方的确认,在收到确认后再发送下一个数据报。
重传计时器:每次发送一个数据报就启动一个计时器。
差错情况:
- 数据帧丢失或检测到帧出错
- ACK丢失
- ACK迟到
滑动窗口协议(性能好,流水线技术
后退N帧协议(GBN)
GBN在重传时必须把原来已经正确传送的数据帧重传,使传送效率降低,故此有了选择重传协议
选择重传协议(SR)
6.TCP的拥塞控制
防止过多的数据注入到网络中
拥塞控制和流量控制的区别:
- 拥塞控制:全局
- 传输层流量控制:端到端,给发送端一个窗口公告
- 链路层流量控制:点到点,收不下就不回复确认
接收窗口和拥塞窗口
接收窗口(rwind):接收方根据接收缓存设置的值,并告知给发送方,反映接收方容量
拥塞窗口(cwind):发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量
发送窗口:min{接收窗口,拥塞窗口}
拥塞控制算法
传输轮次
:发送一批报文段并收到它们确认的时间 RTT
慢启动阈值(ssthresh)
: 到了这个阈值就加法增大来拥塞避免,到了网络拥塞时,更新ssthresh为当前拥塞窗口大小的1/2
最大报文段(MSS)
:拥塞窗口的单位