家教似乎要出新动画的!
十几年了,希望是真的😭😭😭😭😭
传输层的功能
提供端到端的传输,利用套接字,实现复用分用
UDP
再IP的基础上添加了复用分用以及差错检测。
- 无需建立连接
- 无连接状态
- 分组首部开销小,8B
- 没有拥塞控制。
首部格式
- 16b 源端口,不用时可以全为0
- 16b 目的端口
- 16b UDP长度 首部+数据 单位B
- 16b 校验和 ,伪首部(一些特殊的信息,源和目的IP和0001000100001111)与所有字节的反码相加的反码
UDP报文长度单位位4B
TCP
特点
- 面向连接,逻辑链接
- 只有两个端点
- 可靠,无差错、不丢失、不重复、有序
- 全双工
- 面向字节流,确认是对报文里的序号确认的
首部格式
- 16b 源端口
- 16b 目的端口
- 32b 序号 当前发送的字节流的第一个字节的序号
- 32b 确认号 希望接受对方的下一个字节流的第一个序号
- 4b 数据偏移 首部长度的便宜 首部单位4B 15*4=60 首部最大60B
- 6b 保留
- 1b URG 紧急
- 1b ACK 确认位 1 确认号有效 建立连接后都置为1
- 1b PSH 推送位 尽快上交,别再缓存呆
- 1b RST 复位位 释放连接重连
- 1b SYN 同步位 连接请求或连接接收报文
- 1b FIN 终止位 释放连接
- 16b 窗口 流量控制的窗口,允许对方发送的数据量
- 16b 校验和 同UDP 首部信息 17改位6 0000011000001111
- 16b 紧急指针 URF为1有效 紧急数据有多大
- 选项 自定义 首部长度单位4B
连接与释放
三次握手和四次挥手
挺简单的,注意一些特殊的位就好了,和序号的使用就好了
- 三次握手
- SYN=1 ,seq=x
- SYN=1 ,ACK=1 ,seq=y, ack=x+1 不可带数据
- ACK=1 ,seq=x+1 ,ack=y+1 可以带数据,不带不消耗seq
- 四次挥手
- FIN=1 ,seq=u FIN-WAIT-1
- ACK=1 ,seq=v ,ack=u+1 FINT-WAIT-2
- FIN=1 ,ACK=1 ,seq=w ,ack=u+1 TIME-WAIT
- ACK=1 ,seq=u+1 ,ack=w+1
可靠传输
- 序号 对整个字节流的每个字节都编上序号,无结构但有序
- 确认 希望收到对方下一个报文的第一个字节的序号,默认采用累计确认,之确认到第一个丢失的字节
- 重传 超时重传&冗余ACK重传
流量控制
接收方根据接收缓存的大小,动态调整发送发的发送窗口。这个称为接收窗口rwnd。
与数据链路层不一样,传输层是端到端的,数据链路层是相邻结点的,并且窗口大小不能动态调整。
拥塞控制
拥塞控制让网络承受现有的网络负荷,全局性过程设计全部的主机,路由器等等。
拥塞窗口cwnd(congestion)
- 慢开始 先令cwnd=1,即MSS最大报文段长度,每接收到一个报文段的确认则+1,会变成指数增长。又有个阈值ssthresh,超过后使用拥塞避免。
- 拥塞避免 cwnd 发完一个窗口后+MSS
拥塞处理,慢开始启动,超过ssthresh使用拥塞避免,出现拥塞,未按时收到,则从1重新开始,ssthresh设为原先的一半,但大于2。
- 快重传 连续收到三个重复的ACK报文后直接重传。
- 快恢复 跳过cwnd从1重新开始,从快重传后,从cwnd/2开始。