zoukankan      html  css  js  c++  java
  • TCP/IP模型中的传输层

    2020-10-20

    关键字:


    1、传输层的作用

    根据OSI参考模型的分层思想可知,传输层既接受来自网络层提供的服务,又为其上的应用层提供服务。网络层的作用仅仅是使数据包从源端送达到目的端,真实的网络通信需要考虑的因素还是非常多的,但这些偏偏是网络层所不管的,例如数据是否全部正确传输成功、长包是否要拆分发送、数据在传输过程中出错了怎么办等等。传输层的职责就刚刚好是管网络层所不管的事情。用官方的话来说,传输层是保证将数据正确地从应用层转交给网络层,或者反之的将网络层上报的数据正确地上报给应用层用的。

    网络通信对数据传输常见的要求有如下几个:

    1、保证数据传输成功;

    2、保证数据的传输顺序;

    3、保证任意大小的数据都能正确传输;

    4、保证收发双方能以一个合适的速率传输数据;

    5、保证能同时进行多个网络通信;

    6、保证有数据传输回执;

    7、保证长包能够正确拆分传输;

    传输层用于实现上述几点要求的方式是两个通信协议:

    1、TCP协议;

    2、UDP协议。

    2、传输层的协议

    2.1、端口号

    这里的端口号是指网络通信时用于区分不同应用的号码,路由器、交换机等网络设备上的“接口”也被称为“端口”,但这是两种不同的概念。

    端口号由两个字节的整型数表示,因此其有效范围为 0 ~ 65535。网络端口号与IP地址一样,是由 IANA 统一管理分发的,如果某个机构想要独占某端口号,则需要向 IANA 申请。但很少有人这么做,因为 IANA 有设定一个公共区域,任何应用都可以使用这个公共区域的号码而无需报备,对绝大多数网络通信场景而言,公共区域的端口号已经完全能够满足自己的通信需求了,因此就无需费时费力费金钱地申请独占端口号了。

    根据 IANA 的规则,网络端口号共分三类:

    1、知名端口号;

    2、注册端口号;

    3、动态端口号。

    知名端口号的范围为 0 ~ 1023。知名端口号又称为系统端口号,它们是被特定的服务或应用独占的端口号,普通应用不能使用。事实上,在Linux平台一个普通应用在申请知名端口号时是会报错的。

    注册端口号的范围为 1024 ~ 49151。这个区域即是前面提到的公共端口号区域,任何应用都可以自由申请这个区域的端口号使用。

    动态端口号的范围为 49152 ~ 65535。动态端口号是供 C/S架构 模式程序的客户端使用的。客户端在开始连接服务器时只需要指定服务端的端口号即可,自己的端口号是无需指定的,此时系统就会从动态端口号范围内随机选取一个作为客户端的源端口来与服务端通信。

    常见的知名端口号分配信息如下

    端口号 独占方
    20、21 FTP
    22 SSH
    23 Telnet
    25 SMTP
    53 DNS
    80 HTTP
    110 POP3
    179 BGP
    443 HTTPS
       

    2.2、TCP协议

    TCP协议的格式如下图所示:

    TCP协议是一种可靠连接协议,使用这种通信协议时可以保证要传输的数据一定到达目的端,如果失败了则会重传。

    关于TCP协议各个字段的含义,笔者的另一篇博文已有记述,有需要的同学敬请阅读笔者的另一篇文章:

    https://www.cnblogs.com/chorm590/p/12674282.html

    2.3、UDP协议

    UDP协议的格式相较于TCP要简单许多,具体如下图所示:

    UDP相较于TCP是不可靠传输协议。使用UDP协议通信时,只会保证数据包从源端发送出去了,至于能否被目的端接收到就无法保证了。但是UDP协议相较于TCP的传输流程更为简单,传输速率也更高,占用的带宽还比较小。因此在实际应用中是选用TCP还是UDP还要视具体需求而定。

    关于UDP各字段的含义同样在笔者另一篇博文已有记述,有需要的同学敬请阅读另一篇博文:

    https://www.cnblogs.com/chorm590/p/12674282.html

    整个传输层的核心内容基本就这些了。传输层再往上就是应用层了,应用层所关心的就是实际应用了,已经没太多值得记述的知识了,因此TCP/IP模型的知识到传输层就可以告一段落了。


  • 相关阅读:
    BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
    BZOJ 2648 SJY摆棋子(KD Tree)
    Codeforces Round #441 D. Sorting the Coins(模拟)
    HDU 3400 Line belt (三分套三分)
    HDU 5919 Sequence II(主席树+区间不同数个数+区间第k小)
    HDU 5985 Lucky Coins(概率)
    HDU 5988 Coding Contest(浮点数费用流)
    HDU 5792 World is Exploding(树状数组+离散化)
    HDU 5791 Two(LCS求公共子序列个数)
    HDU 5787 K-wolf Number(数位dp)
  • 原文地址:https://www.cnblogs.com/chorm590/p/13843698.html
Copyright © 2011-2022 走看看