运输层
作用
-
提供服务:进程之间的逻辑通信, 差错检测 ,复用和分用
-
面向
- 有连接的TCP
- 无连接的UDP
进程间通信
-
网际层是主机间的逻辑通信,运输层可以看成是进程间的端对端通信
-
复用(多进程都使用运输层传输)与分用(运输层交付给正确进程)
-
端口
- 利用目的主机提供的功能来识别终点
- 一个实现方案即软件端口(抽象的协议端口)
- 熟知端口 0~1023(比如http:80, FTP:21等)
- 登记端口 1024~49151
- 客户端使用端口 49152~65535
UDP
-
特点
- 无连接、首部开销小 , 尽最大努力交付 ,应用层要保证可靠性
- 面向报文:直接封装应用层报文,一次交付一个完整报文
- 需要控制报文长度,否则网际层需要分片或者首部过长,都会影响ip层效率
- 没有拥塞控制
-
首部
- 首部8个字节(8B)<源端口><目的端口><长度><校验和>
-
校验
- 采用首部 伪首部 数据进行二进制反码运算求和在取反
TCP
-
特点
- 有连接、一对一 可靠交付、全双工通信、面向字节流
-
首部
-
首部 20B(20+4N)个字节
-
<源端口><目的端口>
-
<序号>
- 每一个字节都按顺序编号
-
<确认号>
- 确认号=N,表示序号N-1为止的所有数据都已正确收到
-
<数据偏移><保留><URG|ACK|PSH|RST|SYN|FIN><窗口>
-
<校验和><紧急指针>
-
<选项/填充> <=40字节 比如窗口扩大、时间戳等。只设置最大长度MSS,然后默认按对方这个长度
-
-
-
套接字 socket=(ip地址:端口号)
socket随着因特网发展有多种不同意思
1)允许应用访问联网协议的API,即应用层与运输层之间的一种接口,socket API,简称socket
2)socket API中一个函数名
3)调用socket函数的端点称为socket,比如创建一个数据报socket
4)调用socket函数的返回值称为socket描述符,简称为socket
5)操作系统内核中连网协议的Berkeley实现,成为socket实现。
6)这里指TCP传输的端点:套接字
-
可靠传输
-
序号
-
确认
-
重传
-
超时重传:RTTs平滑往返时间等
-
冗余确认
- 选择确认SACK
-
-
-
连接管理
- 连接建立、传输数据、连接释放
- 再次确认:防止已失效的连接请求报文段
-
流量控制
-
滑动窗口 设置首部窗口值rwnd 发送方发送速率不要太快,要让接收方来得及接收
- 比如rwnd=200表示当前我只接收200字节的数据
-
-
拥塞控制
-
原理
- 根据自己估算的网络拥塞成都设置cwnd的值来限制发送速率
-
拥塞处理
- ssthresh设为原理啊的Cwnd的一半cwnd置1
-
-
方法
- 慢开始 - 拥塞避免 - 快重传 - 快恢复