首页 > 其他分享 >职场小白必备知识点-传输层常见问题

职场小白必备知识点-传输层常见问题

时间:2023-11-13 18:31:35浏览次数:39  
标签:知识点 UDP 常见问题 IP TCP 发送 传输 传输层 数据包

传输层的主要功能是什么?

分割并重新组装上层提供的数据流,为数据流提供端到端的传输服务。


传输层如何区分不同应用程序的数据流?

因为,对应传输层而言,它只需要知道目标主机上的哪个服务程序来响应这个程序,而不需要知道这个服务程序是干什么的。因此,我们只需要能够抽象的表示出来这些应用程序和服务程序即可。我们使用端口号来抽象标识每个网络程序。

传输层的TCP和UDP可以接收来自多个应用程序的数据流,用端口号标识他们,然后把他们送给Internet层处理;

同时TCP和UDP接收来自Internet层的数据包,用端口号区分他们,然后交给不同的应用程序。

职场小白必备知识点-传输层常见问题_数据段


因此:在同一IP地址(同一个目标主机)上不同的端口号是两个不同的链接。IP地址和端口号用来唯一的确定网络上数据的目的地。


传输层有哪些协议?
TCP(传输控制协议)UDP(用户数据包协议)
TCP是一个可靠的面向链接的协议,UDP是不可靠的或者说无连接的协议。
可以用打电话和发短信来说明这种关系:

UDP就好似发短信,只管发出去,至于对方是不是空号(网络不可到达)能不能收到(丢包)等并不关心。

TCP好像打电话,双方要通话,首先,要确定对方不是开机(网络可以到达),然后要确定是不是没有信号(),然后还需要对方接听(通信链接)。


什么是UDP协议?


UDP数据包结构如下图所示

源端口(16)

目标端口(16)

报文长度(16)

校验和(16)

数据(可变)


UDP为应用程序提供的是一种不可靠的、无连接的分组交付,因此,UDP报文可能会出现丢失、乱序、重复、延时等问题。

因为它不提供可靠性,它的开销很小。(开销很小具体指什么?下文揭秘)


为什么有了UDP,还需要TCP?

问题4中已经说到,UDP为应用程序提供的是一种无连接、不可靠的分组交付。当网络硬件失效或者负担太重时,数据包可能就会产生丢失、重复、延时、乱序的现象。这些都会导致我们的通信不正常。如果让应用程序来担负差错控制的工作,无疑将给程序员带来许多复杂的工作,于是,我们使用独立的通信协议来保证通信的可靠性是非常必要的。


什么是TCP协议?

传输控制协议TCP是一个面向链接的、可靠的通信协议。


1. 在开始传输前,需要进行三次握手建立链接
2. 可靠性:在传输过程中,通信双方的协议模块继续进行通信
3. 通信结束后,通信双方都会使用改进的三次握手来关闭链接


TCP数据包结构如下图

源端口(16)

目标端口(16)

序号(32)


应答号(32)


头长度(4)

保留(6)

编码位(6)

窗口(16)

校验和(16)

紧急(16)



可选项(如果有,0或32)




数据(可变)





怎么理解协议和程序?

如同我们自定义的应用层协议一样:协议只是给出了一组规范,规定我们应该怎么样(按什么规则)保存数据。

在计算机间传输的永远都是二进制字节码(对于传输层,可以理解为传输的始终是下层的IP数据包),是计算机中的程序通过对这些字节码进行逻辑分析、判断,来控制程序完成差错控制等功能。
至于解析这些字节码的程序,则可以有不同的实现,只要我们按照规则来解析,并作出相应的控制,我们大可以自己写个程序是实现相应功能。


三次握手的目的是什么?

TCP是面向链接的,在面向链接的环境中,开始传输数据之前,在两个中端之间必须先建立一个链接。建立链接的过程可以确保通信双方在发送应用程序数据包之前,都已经准备好了传送和接收数据。并且使通信双方统一了初始化序列号。


TCP如何提供可靠性?

在传输过程中,通信双方的协议模块继续进行通信,从而确保了传输的可靠性。
针对乱序:在通过三次握手进行链接时,序列号被初始化。在传输过程中,TCP继续使用这个序列号来标记发送的每一个数据段,没传送一个数据段,序列号加一。接收方依据序列号重装收到的数据段。
针对丢包:在传输过程中,接收方收到一个数据段后,会用ACK应答码向发送端回复一个IP包进行应答,确认号ACK用来告诉发送端哪些数据包已经成功接收,发送方对未被应答的报文段提供重传。
针对重复:接收端收到数据段后,查看序列号,如果已经成功接收改数据包,则丢弃后面这个数据段。
针对延时:延时造成的第一个问题,就是数据包达到接收端时乱序。
当延时严重时,接收端一直未收到数据段,则不会回复ACK,发送端认为丢包,重发。


什么是预期确认?什么是肯定确认与重新传输?哪些情况会重传?

1.确认号ACK会告诉发送端哪些数据段已经成功接收,并且确认号会向发送端指出接收端希望收到的下一个序列号。即,确实号ACK为上个数据序列号+1,这种机制称为预期确认
2.为了提高效率,我们在发送端,将数据段保存在缓冲区中,直道发送端收到来自接收端的确认号。这种机制被称为“肯定确认与重新传输”。
3.当发送端在给定时间间隔内收不到那个数据段的应答时,发送端就会重传那个数据段。
情况1:网络延时/环路,数据段丢失
情况2:网络延时,数据段推迟到达
情况3:数据段成功到达,应答因为1.2不能达到。


为什么需要窗口技术?

前面我们已经说了,TCP的可靠性,是通过预期确认来实现的。即发送方发送一个数据段后,需要得到对方的确认后,才会发送下一个数据段。
因此,假设一个数据段大小为64KB(IP包最大值),一次发送和确认需要的时间为500MS,则,1S内,只能传送128KB的数据,如果带宽为1M,显然很浪费带宽。为了充分利用带宽,我们使用窗口技术。滑动窗口允许发送方在收到接收方的确认之前发送多个数据段。(窗口大小决定了在收到确认前可以发送的数据段数量)


如何实现流量控制?

窗口数决定了当前传输的最大流量。当我们在传输过程中,通信双方可以根据网络条件动态协商窗口大小,调整窗口大小时,即可实现流量控制。(在TCP的每个确认中,除了ACK外,还包括一个窗口通知)


UDP的开销很小,具体是指什么?

1.因为UDP是无连接的。在传输数据之前,不需要进行复杂的三次握手来建立连接。
2.在传输数据时,没有协议间通信流量(确认信号),也不需要浪费不必要的处理时间(接收确认信号再发一下)。
3;传输结束后,也不用再用改进的三次握手来端口连接。


UDP数据包、TCP数据包大小如何确认?


  1. 无论TCP还是UDP数据包,都需要交给Internet层封装为IP包,而一个IP包,包头中的长度位为16位,所以IP包最大为2的16方,即65535(64KB还需要减去各种包头长度)。

  2. TCP因为面向流,且可以凭借序列号对大文件进行分段和重组,因此,TCP可以用来传输较大的文件。而UDP,如果要传输大于64KB的数据,则需要自己在应用层进行差错控制。

  3. 为了提高传输效率和减少网络通信量(协议间的通信),TCP也会一次传输足够多的数据。

  4. 因为MTU的存在,TCP包和UDP包不是越大越好。(在路由中分包,在接收端重组,加大路由与接收端负担,增大丢包概率。分组丢失,整个数据包重传。)


UDP适用哪些环境?TCP适用哪些环境?

适合UDP的环境:
1.在高效可靠的网络环境中(不需要考虑网络不好导致的丢包、乱序、延时、重复等问题),因为UDP是无连接的服务,不用消耗不必要的网络资源(TCP中的协议间通信)和处理时间(预期确认需要的时间),从而效率要高的多。
2.在轻权通信中,当需要传输的数据量很小(可以装在一个IP数据包内)时。如果我们使用TCP协议,那么,先建立连接,一共需要发送3个IP数据包,然后数据传输,1个IP数据包,产生一个确认信号的IP包,然后关闭连接,需要传输5个IP数据包。使用TCP协议IP包的利用率为1/10。而使用UDP,只需要发送一个IP数据包。哪怕丢包(服务不成功),也可重新申请服务(重传)。

注:而且无论UDP还是TCP,传输的都是IP数据包。当网络环境不好导致丢包时,无论TCP还是UDP都会丢包,这是没有区别的。(如果考虑发送丢包,那么TCP效率更低),只是使用TCP,当连接建立成功后,TCP程序会进行可靠性控制。

UDP很适合这种客户机向服务器传送简单服务请求的环境。此类应用层协议包括TFTP , SNMP , DNS ,DHCP等。3.在对实时性要求很强的通信中:在诸如实时视频直播等对实时性要求很高的环境中,从而允许一定量的丢包的情况下(直播比赛,前面丢失的包,重传出来已经意义不大了),UDP更适合。(可以根据具体需要通过应用层协议提供可靠性,不用像TCP那么严格。)


适合TCP协议的环境:

当网络硬件失效或者负担太重时,数据包可能就会产生丢失、重复、延时、乱序的现象。这些都会导致我们的通信不正常的时候。如果让应用程序来担负差错控制的工作,无疑将给程序员带来许多复杂的工作,于是,我们使用独立的通信协议来保证通信的可靠性是非常必要的。



标签:知识点,UDP,常见问题,IP,TCP,发送,传输,传输层,数据包
From: https://blog.51cto.com/lifulin/8351519

相关文章

  • 工作中知识点总结
        在DBA工作中遇到的问题千奇百怪,可能有些问题是比较常见的,我们一下子就能知道其中的问题关键点所在,但是有些问题的出现并不一定我们可以很快的了解到其中的根本问题,所以需要总结工作中需要用到的知识点,经常查一查看一看。MYSQL知识点MYSQL的WAL机制(日志先行),主要涉及......
  • 每个.NET开发都应掌握的C#多线程知识点
    上篇文章讲述了C#特性(Attribute)知识点,本文将介绍多线程的知识点。多线程编程是现代软件开发中的重要组成部分,它能够充分利用多核处理器,提高应用程序的性能和响应性。C#作为.NET开发的主要语言,提供了强大的多线程支持。本文将介绍C#多线程知识点,帮助.NET开发者更好地应对多线程编程......
  • stm32f103rbt6芯片部分知识点总结。
    使用的工具开发板:stm32f103rbt6内核:arm-cotex-m3系类v7架构r:64脚,b:128字节,6:工作温度范围muc就是stm32单片机芯片,soc是带操作系统的开发板,例如a53。 学习的主要内容掌握接口编程技术即裸板驱动开发通过直接写寄存器(寄存器地址=基地址加偏移地址)或调用函数实现cpu对......
  • 职场小白必备知识点-VRRP协议
    文档说明本文主要介绍VRRP的产生背景和实现方式,并结合华为的VRP平台列举了实现VRRP功能的典型组网方式及配置。各个厂商最主要的区别体现在配置和实现方式,原理都是原理都差不多的。测试过程随着Internet的发展,人们对网络可靠性的要求越来越高。特别是对于终端用户来说,能够时时......
  • SQL知识点总结
    1、直接能看到的放最外一层,若感觉一层查询搞不定就再套一层,把复杂的逻辑放内部。  1、更新:updatetable_namesetparam1=A,param2=Bwhere....  set后面的两个参数用逗号连接。2、插入:insertintotable_namevalues...../insertintotable_name1selectparam1,pa......
  • linux MAC/IPV4/IPV6/网际互连/网关/网桥全面介绍,TCP/IP协议族模型、TCP/IP传输层协
    鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen) Linux是一种自由和开放源代码的类Unix操作系统。它支持多种网络协议,其中包括TCP/IP协议族。在本回答中,我将介绍L......
  • 传输层的七七八八
    TCPTCP提供一种面向连接、可靠的字节流服务。面向连接:两端各自维护一份数据结构,传输数据之前,先进行数据结构部分信息的状态同步,就是去建立连接,建立好之后才能传输数据,不需要的时候断开连接,然后释放相关数据结构可靠性:由TCP将报文段分段为合适的大小后交给IP层TCP发出段后启......
  • 职场小白必备知识点-地址转换
    需求背景客户内网有台服务器提供80端口的服务,现在A公司内部员工可以正常地从内网访问,访问的方式为http://192.168.0.1,现在客户想从B公司也可以访问这个服务器;从路由的角度来看,我们面临的一个问题是:公网不存在私网的路由。从数据走向的角度来看,我们要从B公司访问A公司内网服务器......
  • mysql常见问题及排查步骤
    问题一:数据库连接串测试报错:Couldnotcreateconnectiontodatabaseserver.504错误遇到数据库问题的通用排查步骤确定数据库没有挂确定远程可以连接(前两个可以通过在本地连接验证)以上都OK,大概率服务器ip被限制访问,如果不是人为限制,在可以访问的服务器连上对应数据库,执行......
  • 【Flask框架】全知识点笔记4章60页MD文档,今日篇:flask视图和路由进阶
    本文的主要内容:flask视图&路由、虚拟环境安装、路由各种定义、状态保持、cookie、session、模板基本使用、过滤器&自定义过滤器、模板代码复用:宏、继承/包含、模板中特有变量和函数、Flask-WTF表单、CSRF、数据库操作、ORM、Flask-SQLAlchemy、增删改查操作、案例、蓝图、单元测......