linux udp传输收不到_初入TCP/IP传输层

传输层

4d1f7f339ac9347dca21aa22083b1e27.png

       传输层是OSI七层模型的第四层,实现端对端(即发送端主机应用对接收端主机应用)的数据传输。对IP层(不可靠,无连接的一个层)传来的数据进行整理,按照其上一层期望的格式整理好后根据指定的端口,发送给应用。传输层要实现数据传输需要两端的主机设置的协议号相同;两端主机的IP用来确定计算机的网络地址;两端主机进行通信的应用端口号,能确定发收端计算机上进行通信的具体应用程序。我们可以用送快递这个例子来模拟网络上的数据传输:

       邮递员IP根据收件人地址(目的IP)向目的地(目标计算机)投递包裹(数据信息),包裹到达目的地以后,由对方(传输层协议)根据包裹信息(目的端口号)确定最终的收件人(接收端的应用)。

TCP协议和UDP协议

      TCP是面向连接的可靠的传输控制流协议,只有进行三次握手建立连接后,才能进行数据的通信,四次挥手释放连接。TCP为提供可靠的传输,实行“顺序控制”和“重发控制”机制,还有“流量控制”、“拥塞控制”、提高网络利用率等功能,只能实现一对一的通信。

      UDP是不具有可靠性的数据报协议,不建立连接。数据到达对端传输层后一些细微的处理他会交给应用层去完成,传输层只是单纯实现了传输数据的功能而已,因为它没有像TCP那样对数据不仅实现传输还要做额外的各种处理工作,所以比较高速。它能实现一对一的数据传输,也可以实现一对多的数据传输。

       对于以上这两者的用途我们要按需使用,TCP确实可靠,但是在一些应用场景下对可靠传输的要求不高的情况下,UDP协议具有更好的实时性,工作效率要比TCP高。同时,UDP的段结构要比TCP的段结构简单,能降低网络开销。

端口号

       数据链路中的MAC地址和IP地址分别确定不同的计算机和TCP/IP网络中互连的主机和路由器。在传输层中也有类似的地址概念,就是端口号,用来识别同一台计算机中进行通信的不同应用程序,也可以认为是程序地址。

       一台计算机中有很多的应用程序,像QQ、微信、web浏览器等,就像是QQ上向对方计算机发的消息不会在对方微信中提醒一样(假设对方微信和QQ都在运行),因为在传输层已经进行了端口识别这一步,才能使消息准确到达对端指定进程中。

      总的来说,计算机之间的数据通信,就是建立在IP地址、端口号、协议号上进行的。

TCP的特点

      TCP通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等实现可靠性传输。

01

TCP校验和

       TCP校验和是一个端到端的校验和,由发送端计算,然后由接收端验证。其目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验和有差错,则TCP段会被直接丢弃。

02

序列号,确认应答

       通过序列号和确认应答提高可靠性。

03

重发控制

       在重发数据之前,等待确认应答到来的那段时间间隔。如果超过了那个时间,发送端将对数据进行重新发送。当被发送之后,还是收不到应答就再次被发送,等待确认应答的时间也会相对于上一次以2的指数次方倍延长,即就是第二次相对于第一次等待时间是2倍,第三次相对于第二次是4倍,之后以此类推。当然不会被无限制的重发,达到一定次数之后还收不到确认应答就会被判断为对端主机或网络发生异常,前置关闭连接,并通知应用程序强行终止此连接。

04

连接管理

建立连接的三次握手

  1. 客户端向服务端发送SYN请求建立连接。

  2. 服务端对于客户的请求做了ACK确认应答,以及服务端的SYN建立连接请求。

  3. 客户端对服务端的ACK回应。

断开连接的四次挥手

  1. A端断开连接的FIN请求 -> B端。

  2. B端对于这一请求的ACK回应 -> A端。

  3. B端再发FIN断开连接请求 -> A端。

  4. A端ACK确认应答 -> B端。

6959040c58e25132f3e3d8dc7d8096d1.png

       TCP以段为单位发送数据,在建立连接时,经过三次握手的过程中也确定了通信两端能接受的“最大消息长度”(MSS),即在此过程中互相告知对方自己能够适应的MSS值,最终在两者中选最小的作为传输数据的MSS,最理想的最大消息长度是IP不能分片处理的最大数据长度。

      传输层上层传的数据长度大于MSS值,则以MSS为单位进行数据分段传送,重发也是以MSS为单位进行分段重发。

05

窗口控制

34b70954cb0926e9f256416e90375fce.png

       以上了解到TCP以段为单位发送数据,每发送一个段,必须等到接收方返回确认后再发送下一段否则就重发。这样要是往返时间较长,显然不是很高效,所以TCP提供滑动窗口来解决这一缺陷。

f84221b6d3dd7d808affe83bb2fdf4f6.png

       窗口大小就是无需等待确认应答而可以继续发送数据的最大值。这个有点抽象,我们就上图而言,滑动窗口大小是500,MSS值是100,即在不收到确认消息的情况下每次最大发送5个段的信息,发送端先发送第一段100字节的数据,对端没返回确认信息,还可以继续发第二段100字节,直到发送到第五段100字节的信息,如果一个确认信息都没收到,那么表明达到了滑动窗口的最大值,发送端会对已经发送的500字节数据进行重发。要是收到一个段的确认信息,就将窗口往后移动一个段的长度,同时该段被从缓冲区中清除,已经发送却没收到确认的数据超时的话,继续被重发。如果重发超时的数据长度超出滑动窗口允许的长度,那就表明网络或者连接发生了异常。

文章转自:小组17级成员--畅柯

8c3b87b80ba12d45f8adefd776931d78.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值