计算机网络day5

本文详细介绍了TCP与UDP在运输层的区别,包括复用/分用机制、连接建立与释放的过程。TCP通过三次握手建立连接,使用流量控制和拥塞控制确保可靠传输;而UDP则无需连接,适用于对实时性要求高的场景。TCP的流量控制通过接收方调整发送窗口实现,拥塞控制包括慢开始、拥塞避免、快重传和快恢复策略。TCP连接关闭则涉及四次挥手,确保数据传输的完整性和连接的正确关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20220311

一 . 运输层

复用/分用
发送方运输层的udp协议会复用应用层的报文段,添加udp首部,只以源端口及目的端口标识该报文段
接收方运输层的udp协议会分用网络层的ip数据报,根据首部中的目的端口将数据报交给应用层指定进程。
发送方运输层的tcp协议会复用应用层的报文段,添加tcp首部,以源端口、目的端口、源ip地址、目的ip地址标记该报文段
接收方运输层的tcp协议会分用网络层的ip数据报,根据首部中的四个值,交给指定应用进程建立的一个套接字(接收方一个应用进程可以和不同发送方都建立一个套接字)

二。TCP对比UDP

  1. udp不需要建立连接即可发送数据,tcp要三次握手建立连接,发送数据后还需要四次挥手释放连接
  2. udp支持单、多、广播,tcp因为建立专用连接,只支持单播
  3. UDP面向报文段,直接发送应用层交付的整个报文段。TCP面向字节流,缓存应用层交付的数据报,从中提取字节流分段发送。
  4. UDP不提供可靠传输,TCP提供可靠传输(流量控制及拥塞控制)

三。 TCP流量控制

流量控制是在滑动窗口的基础上实现的,接收方通过告知发送方调整发送窗口来实现。
如果接收方让发送方调整发送窗口为0,发送方会启动一个0窗口计时器。如果超时未收到增大窗口通知,则发送0窗口确认报文,并为该报文启动一个0窗口确认报文计时器,该确认计时器如果超时,则继续重传0窗口确认报文,直到收到接收方的增大窗口通知为止。

四 . TCP拥塞控制

拥塞控制四大算法:慢开始、拥塞避免、快重传、快恢复
发送方会维护一个拥塞窗口,而接收方还会告知自己的接收窗口,发送方的发送窗口取接收窗口和拥塞窗口中更小的一个。
发送方开始发送数据时,使用慢开始算法,初始只能发送一个报文段,下次可发送2个,再下次可发送4个,发送窗口大小以2的指数级增长。当发送窗口大于拥塞窗口时,使用拥塞避免算法,下次发送只能多发送一个。
使用拥塞避免算法时,如果出现了超时,当前拥塞窗口减半,发送窗口设置为1,重新使用慢开始算法。
但如果在超时计时器生效之前,连续收到三个重复确认,则拥塞窗口减半,然后发送窗口设置为拥塞窗口值,继续执行拥塞控制算法。

五。tcp建立连接

简述:三报文握手->传输数据->四报文挥手
三报文握手
客户端想要和服务器建立连接,经历以下过程:
大写为本次数据包的类型,小写为实际值

  1. 客户端发送数据包,SYN=1,seq=0,请求服务端建立连接
  2. 服务端接收数据包,SYN=1,ACK=1,seq=1,ack=1,同意建立连接,请客户端从1号位开始发送数据(ack=0+1)
  3. 客户端发送数据包,ACK=1,seq=1,ack=1,收到同意请求,请服务端也从1号位开始发送数据
    数据传输
  4. 客户端发送确认包后,发送第一个数据包,seq=1,ack=1,len=725,客户端本次发送725字节数据
  5. 服务端确认客户端的确认包,seq=1,ack=726(已收到725字节数据,请从726开始发送)
  6. 客户端发送确认包,seq=726,ack=1…
    无论是客户端还是服务端向对方传输数据,ack就为已收到的字节数+1(接收窗口),seq为对方上个确认包的ack值(发送窗口),这样就串联起来了
    四次挥手
    假设客户端想要主动关闭连接
  7. 客户端发送数据包,FIN=1,seq=1000,请求关闭连接。客户端进入FIN_1状态
  8. 服务端接收到该包,知道客户端想关闭连接,但不会马上关闭连接。服务端发送数据包,seq=600,ACK=1001,继续传输一些数据。客户端收到该包,了解服务端同意关闭连接,进入FIN_2状态
  9. 服务端数据传输完了,发送数据包,FIN=1,seq=600。服务端数据已传输完毕,服务端需要断开连接,客户端可以准备关闭连接。服务端进入关闭最后确认状态。
    10.客户端收到数据包,发送ACK=601,seq=1001。客户端进入关闭等待状态。服务端收到该确认包,关闭连接。客户端在关闭等待状态下等待两倍的数据包最大存活时长后,最终关闭

总结:

  1. 主动发起方反而是最后关闭的
  2. 之所以要等待2MSL(一来一回)。第一是要保证服务端能够正确关闭连接,如果第四次的ACK丢失,2MSL的时候可能服务器重传的FIN刚好到达,此时可以发出最后一个ACK,然后又进入2MSL等待。如果这个ACK,服务端真的没收到,那么也可以确保网络中不会有这一次连接的数据包了,下一次连接可以正常建立(可以使用同ip和端口)。

tcp首部常用标志位:

  1. PSH置1,数据推送,接收方需尽快交付给上层应用
  2. RST置1,本次请求有误,请释放并重新建立
  3. SYN置1,三次握手使用
  4. FIN置1,四次挥手使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值