传输层协议TCP&UDP
TCP协议特点 :分段,编号,流量控制,建立会话
UDP协议特点 :一个数据包就能完成数据通信,不建立会话,可应用于多播
UDP协议
UDP报文首部格式
UDP主要特点
TCP协议
TCP协议解决的问题
TCP协议主要解决三个问题,即可靠传输(丢包重传)、流量控制(控制发包速率)、避免网络拥塞。
TCP协议概述
TCP连接到套接字socket(IP地址+端口号)
TCP可靠传输
停止等待协议
策略:“只要你没告诉我收到了,我就认为你没收到!”
停止等待协议-发送端收到确认前不会发送下一个包,而是超时重传发送过的包。停止等待协议的优点是简单,缺点是信道利用率太低(不连续发送,总在等待确认)
滑动窗口
为了连续发送,可以使用滑动窗口技术-发送方维护一个滑动窗口,连续发送滑动窗口内的数据包,收到确认时滑动窗口向后滑动。
后退N帧协议
选择重传协议
TCP流量控制
“一个会话,发送端与接收端速率不一致问题!”
解决通信两端处理时间不一样的问题。通过实时调整滑窗尺寸的大小(尺寸甚至可以是0)来实现流量控制。接收端主动调整滑窗大小,发送端根据接收端发送的报文调整相应的滑窗。发送端也会定时发送报文向接收端确认滑窗信息,避免接收端发送的相关调整滑窗大小的报文丢失带来的影响。
TCP拥塞控制
“多个计算机,多个会话,同一段链路数据量太大造成的堵塞”
慢开始和拥塞避免算法
- 从1个数据包开始以指数倍增的方式发送数据包,直至达到慢开始门限(首次16)
- 在达到慢开始门限后每次连续发送的数据包数量改为线性增长( +4 )
- 再出现网络拥塞(丢包)情况后,重新开始该过程并将慢开始门限降低
- 目的是在线性增长并且不会造成网络拥塞的情况下,以较快的速度发送数据
快恢复 优化后,每次拥塞后直接从新的慢开始门限开始线性增长
TCP报文头
TCP的传输连接管理
TCP状态机
TCP 的三次握手,四次挥手机制
三次握手
- 首先Client端发送连接请求报文,syn
- Server端接受连接后回复ACK + syn 报文,并为这次连接分配资源。
Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。
四次挥手
TCP断开链接的过程和建立链接的过程比较类似,只不过中间的两部并不总是会合成一步走,所以它分成了4个动作
- 首先Client端发送关闭请求报文fin 进入fin_wait_1状态
- Server端接受后回复 ack 进入close_wait 状态
- Client端接受 ack后进入fin_wait_2状态 表示知道对方知道要断开连接
- Sever再发送 fin 并进入 last_ack状态
- Client端接收到fin后,发送ack 并等待一段时间后自动关闭连接
- 等待时间: 等待残留报文彻底消逝,防止对下次TCP链接造成干扰
- 防止Sever端没有接收到ACK,等待重发ACK
为什么要三次握手?
三次握手的目的是建立可靠的通信信道,目的就是双方确认自己与对方的发送与接收是正常的。
- 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
- 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
- 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。