运输层
UDP
- UDP没有拥塞控制
- UDP支持一对一、一对多、多对一和多对多的交互通信
- UDP的首部开销小
UDP首部字段有8个字节,由四个字段组成
1.源端口:
2.目的端口:
3.长度:
4.检验和:检测UDP用户数据报在传输中是否有错。有错就丢失
TCP
- 面向连接的运输层协议
- 每一条TCP连接只能有两个端点
- TCP提供可靠交付的服务
- TCP提供全双工通信
- TCP面向字节流
TCP首部最小长度是20字节
1.源端口和目的端口 各占2个字节
2.序号 4个字节
3.确认号 4个字节
4.数据偏移
socket
套接字 (socket) = (IP地址:端口号)
ARQ协议
发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
TCP可靠传输的实现
在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。
1.以字节为单位的滑动窗口
2.超时重传时间的选择(TCP的自适应算法)
3.选择确认
利用滑动窗口实现流量限制
发送方的发送窗口不能超过接收方给出的接收窗口的数值
TCP的拥塞控制
1.慢开始和拥塞避免
2.快重传和快恢复
TCP三次握手
A向B发出建立连接的请求(SYN),B收到建立连接的包,发回确认可以建立的包(SYN+ACK),A收到B回传的(SYN+ACK),再发出确认建立连接的包(ACK)。
为什么A要发ACK包,主要是为了防止已失效的链接请求报文突然又传送到了B,但是A不需要建立连接,如果不采用三次握手,B会以为连接已经建立,并一直等待A发来的数据
TCP四次挥手
A发出结束连接的请求(FIN),B收到结束连接的包,发回确认收到结束连接的包(ACK),然后通知进程结束连接,此时A向B的连接就释放了。A不可以向B发送数据,但是B可以向A发送数据。如果B没有要向A发送数据,则通知TCP释放连接,这时B会发出一个释放连接的包(FIN+ACK),等待A的确认,A收到则会发出一个确认包(ACK),B关闭连接,A进入时间等待状态,过了一定时间后再关闭连接
为什么要等待呢。
1.为了保证A发送的最后一个ACK报文段能够到达B。
2.防止“已失效的连接请求报文段”出现在本连接中。