容易被忽略的网络传输层小知识点

2024-04-27 12:32

本文主要是介绍容易被忽略的网络传输层小知识点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、端口号的分类以及用途

    众所周知,一个ip地址对应了唯一的主机。而端口号对应了唯一的一台主机的唯一一个网络进程。

    而这两者联系起来就叫套接字。因此套接字对应了唯一的一个网络进程。

    那么,什么是端口号?

    端口号其实就是一个为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口,只具有本地意义。

    因此,两台计算机之间交互,不仅要知道双方的ip地址,也需要知道双方的端口号。可见端口号的重要。

    在TCP/UDP的报头信息中,都含有对应的端口号的字段,其一般为16位。因此其最多可以表示65535个端口。

    那么,这些端口是随意使用吗?答案是:不是的。

    他们是有分类的:

    1、服务器端使用的端口号

        1>、熟知端口号(系统端口号):0~1023(可在网站www.iana.org查阅),一般表示一些比较重要的应用进程。

                常见的有:FTP:21(文件传输协议)

                                  SSH:22(安全登录、文件传送、端口重定向)

                                  TELNET:23(远程终端协议)

                                  SMPT:25(简单E-mail传送协议)

                                  DNS:53(域名系统)

                                  TFTP:69(简单文本传送协议)

                                  HTTP:80(超文本传送协议)

                                  SNMP:161(简单网络管理协议)

                                  HTTPS:443(加密的HTTP)

        2>、登记端口号:1024~49151,是为没有熟知端口号的应用进程使用的。使用前必须先登记,以防止重复。

    2、客户端使用的端口号

        49152~65535,这类端口号是留给客户进程选择暂时使用的。使用完后,还可以供其他进程使用。


二、TCP报头信息中的URG字段和PSH字段

    在TCP报头信息中,有6个只占了一位的字段(URG/ACK/PSH/RET/SYN/FIN),这两个就包含在内。

    1、URG(URGent)

        又叫紧急URG,TCP报头中有一个16位紧急指针字段。当URG字段为1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应该尽快传送(相当于优先级高的数据),而不是按照原来的排队顺序来传送。

        比如,用户需要Ctrl+C来发送中断命令。那么应该立刻处理该中断,因此需要将该数据做紧急处理。那么,如何处理呢?

        发送方TCP就吧紧急数据直接插入在本报文段数据的最前边。

    2、PSH(PuSH)

        又叫推送PSH,当两个应用进程在进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后就能够立即收到对方的响应。在这种情况下,就可以将PSH字段置为1,并立即创建一个报文段发出去。

    接收方收到后,就尽快的交付接受应用进程,而不再等待缓冲区满了在交付。(一般很少使用)

    两者看似相似,都是处理优先级比较高的数据。但两者最大的区别就是上边粗体部分的区别。


三、常见的TCP四种计时器

    众所周知,TCP是一个安全可靠的传输层协议。那么,要做到这一点,就势必会比较复杂。那么,TCP是如何保证这一点呢?

    首先,TCP是一个面向连接的,全双工的,面向字节流的传输协议。

    既然面向连接,因此就需要通信双方共同来维护一个数据结构(哪一种数据结构,这里不做讨论)。还有它的停止等待协议(请求/响应),滑动窗口,流量控制,拥塞控制,超时重传等机制来共同维护。

    那么,下边是4种常见的用来维护TCP可靠信的计时器

    1、超时重传计时器(属于停止等待协议范畴)

       

    如上图所示,如果在发送数据过程中,数据丢失。如果没有这个定时器,那么这个数据将会被永远丢失。因此,为了保证数据不被丢失,设定一个超时计时器(时间要大于数据平均往返时间)(其实往返时间是不定的,这和当时场景下的网络时延有关。这样,只是为了更加简单的讲解这个问题)。在发送数据时,暂时保留已发送的数据的副本,启动计时器,在计时器结束前,还没有收到确认消息。那么就认为数据丢失,进行重传。

    当然,还有两种情况就是确认丢失和确认迟到。这里不做讲解。


     2、持续计时器(属于流量控制范畴)

    所谓流量控制,其实就是让发送发发的慢一点,使得接收方来得及接受。

    因此,使用了滑动窗口的机制实现了流量控制。

    考虑如下场景:

    我们很清楚,在网络传输中,任何一条消息都有可能丢失。不管是发送消息,还是确认消息等等。假如接收方的窗口大小为1024。并且此时,接收方的窗口已经没有剩余。那么接收方就会给发送方发送一条零窗口通知(告诉发送方,不要再发了,我的窗口大小已经是0)。此时,发送方将不再发送数据。过了一会,接受方的一部分数据交付给了上层,窗口又有了一定的空间,此时接收方就会给发送方发送一条非零窗口通知。但是,不幸的是,这条消息丢失了。那么这样,接收方一直等发送方的确认,而发送方一直等接收方发非零窗口通知。这样,就进入了死锁的局面。

    因此,为了解决这个问题,TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就自动计时。如果时间已到,就发送一个零窗口探测报文(仅仅携带一个字节的数据),而对方就会在确认这个探测报文段时给出现在的窗口大小。如果仍为0,就重新设置计时器。这样就不会死锁。


    3、等待计时器(属于连接释放范畴)

    在释放连接后,主动发起释放的一方需要等待2MSL(最长报文段寿命)。这是为什么?

    (假设客户端发起释放连接)

    1>、为了保证客户端发送的最后一条确认消息能够准确到达服务器。如果该消息丢失,那么服务器就会启动超时重传机制,在客户端收到该超时重传的消息后,重新设定该计时器的时间为2MSL,然后再可以发送一个确认消息。否则,如果没有这个计时器,再最后一条确认消息丢失后,客户端已经关闭。而服务器永远不会收到那条确认消息,也因此永远不能释放连接。

    2>、防止“已失效的连接请求报文段”。客户端在发送完最后一个ACK报文段后,再经过2MSL时间,就可以使本连接持续的时间内所产生的所有报文段从网络中消失。这样就不会下一个新的连接中出现旧的连接请求报文段。


    4、保活计时器(属于连接与释放连接范畴)

    考虑这样一个场景:客户已主动与服务器建立了TCP连接。但后来客户端主机突然故障。显然,服务器以后就不能收到该 客户机的消息,那怎么办?

    使用该计时器,服务器没收到一次客户的请求,就重新设置该计时器,通常为2小时。如果2个小时内没有收到客户的数据,服务器就发送一个探测报文段,以后则每隔75分钟发送一次。如果发送10个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭连接。

       

这篇关于容易被忽略的网络传输层小知识点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940511

相关文章

嵌入式软件工程师应聘知识点

嵌入式软件工程师应聘 修改浏览权限 | 删除 数据结构(C语言)部分常考的知识点: 1、局部变量能、全局变量和静态变量 2、堆和栈 3、Const、volatile、define、typedef的用途 4、链表(比如链表的插入、删除和排序) 5、排序(考查冒泡法的较多) 6、可重入函数 、malloc函数 7、指针(常考函数指针,函数指针,数组指针,指针数组和

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

使用 GoPhish 和 DigitalOcean 进行网络钓鱼

配置环境 数字海洋VPS 我创建的丢弃物被分配了一个 IP 地址68.183.113.176 让我们登录VPS并安装邮件传递代理: ssh root@68.183.113.176apt-get install postfix 后缀配置中的点变量到我们在 DigitalOcean 中分配的 IP:mynetworks nano /etc/postfix/main.cf

Linux网络编程之循环服务器

1.介绍 Linux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数. 2.循环服务器模型 TCP循环服务器: 算法如下:          socket(...);

Linux网络编程之简单并发服务器

1.概念 与前面介绍的循环服务器不同,并发服务器对服务请求并发处理。而循环服务器只能够一个一个的处理客户端的请求,显然效率很低. 并发服务器通过建立多个子进程来实现对请求的并发处理,但是由于不清楚请求客户端的数目,因此很难确定子进程的数目。因此可以动态增加子进程与事先分配的子进程相结合的方法来实现并发服务器。 2. 算法流程 (1)TCP简单并发服务器:     服务器子进程1:

Android 扇形网络控件 - 无网络视图(动画)

前言 一般在APP没有网络的情况下,我们都会用一个无网络的提示图标,在提示方面为了统一app的情况,我们一般使用简单的提示图标,偶尔只需要改变一下图标的颜色就一举两得,而不需要让PS来换一次颜色。当然app有图标特殊要求的就另当别论了。 效果图 当你第一眼看到这样的图,二话不说直接让UI给你切一张图标来的快对吧,我其实开始也是这么想的,但是到了做的app越来越多的时候,你就会发现就算是用

poj 2391 Ombrophobic Bovines (网络流)

这是一道很经典的网络流的题目。首先我们考虑假如我们的时间为无穷大。我们吧每个点拆成2个点 i和i' .。虚拟源点s和汇点t。对于每个点建边(s,i, a[i])  (i‘,t,ib[i]) 。 其中a[i]为给点有多少牛,b[i]为容量。i和j连通 建边 (i,j',inf);如果最大流==所有牛的个数,就可能装下所有的牛。那么现在我们考虑时间。假设最大时间为T.那么如果i到j的的最短时间>T