1.目的:实现进程间通信(端口到端口)
2.熟知端口号:IP中的协议字段UDP为17,TCP为6
3.UDP(用户数据报协议): 无连接、不可靠,但是无需连接,所以比较快,适用于视频会议、直播等实时应用。面向应用报文,只添加一个UDP首部,不进行拆分。
4.TCP(传输控制协议):面向字节流,有连接,可靠传输,会拆分应用报文。
- 流量控制:
PS:若接收到窗口为0时,启动0窗口计时器,0窗口计时器超时则发送0窗口探测报文,该报文也有重传计时器,超时继续重传。
- 拥塞控制:发送方维护一个拥塞窗口cwnd(初始为1)、慢开始门限
- 慢开始:当拥塞窗口<慢开始门限,拥塞窗口指数增长(1.2.4.8.16...)
- 拥塞避免:当拥塞窗口>=慢开始门限,拥塞窗口线性增长(16.17.18...)。重传计时器超时(可能拥塞)则将门限减少为发生拥塞时的一半,并将拥塞窗口设为1,重新慢开始
- 快重传:(减少超时重传)
1)使发送方不需等超时再重传,而是尽快重传;
2)要求接收方收到数据立即发送确认,而不是发送数据时捎带确认
3)即使收到失序的报文段,也要对已收到的报文段重复确认
4)发送方一旦收到3个连续的重复确认,立即重传相应报文段
- 快恢复:接收方一旦收到3个重复的确认,就将拥塞窗口以及门限设置为当前拥塞窗口的一半(从一半门限开始拥塞避免算法)
- 超时重传时间的选择:Karn算法(加权平均)
- 可靠传输的实现:使用以字节为单位的滑动窗口
- 三次握手:
PS:为什么不能两次握手?因为若两次握手,则对服务器来说,连接的建立不够可靠,比如一个连接请求报文经网络延迟等原因在不正确的时间到达了,服务器依然会认为连接成功的建立了,这样就会浪费服务器的资源,若改为三次握手,因为第三次握手中报文的ack字段对应着服务器发送的报文的seq,所以不会导致误判。
- 四次挥手:
PS:
1)其实类似于三报文握手,四次挥手也是为了确认发出去的FIN报文被正常接收。
2)TIME_WAIT的作用有两个,一是防止最后一个ACK报文未能到达服务器时客户端就关闭连接,导致服务器不断重发,无法正常关闭;二是2MSL的时间可以保证这次连接的报文全部消亡,不会对下一次连接产生影响。
- 首部格式: