UNP学习笔记-第二章传输层

TIME_WAIT状态

tcp中主动发起断开连接的一方在发送过FIN之后处于TIME_WAIT的状态,该状态的持续时间是MSL的两倍,有时候称之为2MSL

MSL 的确定:就是分组能够在互联网中的存在的时间,主要是由跳步数TTL进行确认的,我们假设具有最大跳步数的分组在网络中的存在时间不能 超过MSL,可以认为MSL略大于最大跳步数存在的时间

TIME_WAIT状态存在的两个理由
  • 可靠的实现TCP全双工连接的终止
  • 允许老的重复分节在网络中消逝

可靠的实现TCP终止

假设主动发起连接关闭方发送的ACK丢失了的话,就会触发超时重发 FIN 报文,另一方接收到 FIN 后,会重发 ACK 给被动关闭方, 一来一去正好 2 个 MSL。可以保证实现TCP的可靠的终止

防止历史连接错乱的出现在新的连接中

假设主机1同主机2之间实现了tcp连接,断开连接的时候没有time_wait的状态的话可能出现这种情况:

上一个连接中的数据包没有消失在网络中,假设两台主机用同上一次的端口进行连接(也即是四元组相同),可能就会接收到还没有消逝的上一次的残留的数据包使得这次的连接数据发生错乱。

设置了TIME_WAIT的话能够保证数据报文在下一次建立tcp连接之前全部消失在互联网中

TCP端口号与并发服务器

记住一点:服务端的端口号就代表着一种服务,一个端口号是可以同时为多个客户端进程进行连接通信的

并发服务器:当客户端发起连接的时候,服务端创建子进程同客户端进行连接,服务端的ip与端口号都是监听套接字所绑定的端口号。

TCP输出

每一个TCP套接字都是由一个发送缓冲区的,可以通过更改SO_SNDBUF套接字选项来更改缓冲区的大小。

比如当用户进程调用write的时候,意义是将应用进程缓冲区的内容复制到tcp发送缓冲区中,如果发送缓冲区不足以放下应用进程缓冲区的内容,那么write就会发生阻塞,直到全部复制到发送缓冲区。

因此,write函数调用成功 仅仅是数据复制到了socket缓冲区,并不代表数据被对方接收了,必须通过ACK才能够确认被接收了

本端的TCP以MSS大小或者是更小的块将数据发送给IP,同时设置TCP首部等
请添加图片描述

UDP输出

因为UDP是不可靠的,那么就不必保存应用进程数据的一个副本,无需真正的发送缓冲区,来了数据直接发送就行了

用户进程调用write的时候,成功返回表示所写的数据报或者所有的片段都被加入数据链路层的队列中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值