精华内容
下载资源
问答
  • TCP采用哪些机制来实现可靠数据传输、流控和拥塞控制? 1.采用面向连接的三次握手实现可靠对象传输。 2.使用数据窗口机制协商队列大小实现数据队列传输。 3.通过序列化应答和必要时重发数据包,TCP应用程序提供...
    TCP采用哪些机制来实现可靠数据传输、流控和拥塞控制?
    
    1.采用面向连接的三次握手实现可靠对象传输。
    2.使用数据窗口机制协商队列大小实现数据队列传输。
    3.通过序列化应答和必要时重发数据包,TCP 为应用程序提供了可靠的传输流和虚拟连接服务。
    
    下面是找到的长篇大论中比较好的文章:
    
    一、TCP协议
    
    1、TCP 通过以下方式提供可靠性: 
    
    ◆ 应用程序分割为TCP认为最合适发送的数据块。由TCP传递给IP的信息单位叫做报文段。 
    ◆ 当TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能记时收到一个确认,它 就重发这个报文段。 
    ◆ 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常延迟几分之一秒。 
    ◆ TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化如果收到报文段的检验和有差错,TCP将丢弃这个报文段和不确认收到这个报文段。 
    ◆ 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能失序,因此TCP报文段的到达也可能失序。如果必要,TCP将对收到的数据进行排序,将收到的数据以正确的顺序交给应用层。 
    ◆ 既然IP数据报会发生重复,TCP连接端必须丢弃重复的数据。 
    ◆ TCP还能提供流量控制,TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。 
      另外,TCP对字节流的内容不作任何解释。
    
    2、TCP首部:
      TCP数据被封装在一个IP数据报中,格式如下: 
      IP首部20 TCP首部20 TCP首部 
    
    
    TCP首部格式如下: 
      16位源端口号 16位目的端口号 
    32位序号 
    32位确认序号 
    4位首部长度 保留6位 U
    R
    G A
    C
    K P
    S
    H R
    S
    T S
    Y
    N F
    I
    N 16位窗口大小 
    16位检验和 16位紧急指针 
    选项 
    数据 
    
    
    说明:
    (1)每个TCP段都包括源端和目的端的端口号,用于寻找发送端和接收端的应用进程。这两个值加上IP首部的源端IP地址和目的端IP地址唯一确定一个TCP连接。
    (2)序号用来标识从TCP发送端向接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。
    (3)当建立一个新连接时,SYN标志变1。序号字段包含由这个主机选择的该连接的初始序号ISN,该主机要发送数据的第一个字节的序号为这个ISN加1,因为SYN标志使用了一个序号。
    (4)既然每个被传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当时上次已成功收到数据字节序号加1。只有ACK标志为1时确认序号字段才有效。
    (5)发送ACK无需任何代价,因为32位的确认序号字段和ACK标志一样,总是TCP首部的一部分。因此一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。
    (6)TCP为应用层提供全双工的服务。因此,连接的每一端必须保持每个方向上的传输数据序号。
    (7)TCP可以表述为一个没有选择确认或否认的华东窗口协议。因此TCP首部中的确认序号表示发送方已成功收到字节,但还不包含确认序号所指的字节。当前还无法对数据流中选定的部分进行确认。
    (8)首部长度需要设置,因为任选字段的长度是可变的。TCP首部最多60个字节。
    (9)6个标志位中的多个可同时设置为1
        ◆ URG-紧急指针有效
        ◆ ACK-确认序号有效
        ◆ PSH-接收方应尽快将这个报文段交给应用层
        ◆ RST-重建连接
        ◆ SYN-同步序号用来发起一个连接
        ◆ FIN-发送端完成发送任务
    (10)TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端期望接收的字节数。窗口大小是一个16为的字段,因而窗口大小最大为65535字节。
    (11)检验和覆盖整个TCP报文端:TCP首部和TCP数据。这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。TCP检验和的计算和UDP首部检验和的计算一样,也使用伪首部。
    (12)紧急指针是一个正的偏移量,黄蓉序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
    (13)最常见的可选字段是最长报文大小MMS,每个连接方通常都在通信的第一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。
    
    二、TCP连接的建立和终止
    
    1、建立连接协议
    (1) 请求端发送一个SYN段指明客户打算连接的服务器的端口,隐疾初始序号(ISN),这个SYN报文段为报文段1。
    (2) 服务器端发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。
    (3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)。
       这3个报文段完成连接的建立,称为三次握手。发送第一个SYN的一端将执行主动打开,接收这个SYN并发回下一个SYN的另一端执行被动打开。
    
    2、连接终止协议
      由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
     (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
     (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
     (3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
     (4) 客户段发回确认,并将确认序号设置为收到序号加1(报文段7)。
    
    3、连接建立的超时
       如果与服务器无法建立连接,客户端就会三次向服务器发送连接请求。在规定的时间内服务器未应答,则连接失败。
    
    4、最大报文段长度MSS
      最大报文段长度表示TCP传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的MSS。
    一般,如果没有分段发生,MSS还是越大越好。报文段越大允许每个报文段传送的数据越多,相对IP和TCP首部有更高的网络利用率。当TCP发送一个 SYN时,它能将MSS值设置为外出接口的MTU长度减去IP首部和TCP首部长度。对于以太网,MSS值可达1460。
       如果目的地址为非本地的,MSS值通常默认为536,是否本地主要通过网络号区分。MSS让主机限制另一端发送数据报的长度,加上主机也能控制它发送数据报的长度,这将使以较小MTU连接到一个网络上的主机避免分段。
    
    5、 TCP的半关闭
       TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力,这就是TCP的半关闭。
    客户端发送FIN,另一端发送对这个FIN的ACK报文段。当收到半关闭的一端在完成它的数据传送后,才发送FIN关闭这个方向的连接,客户端再对这个FIN确认,这个连接才彻底关闭。
    
    6、2MSL连接
      TIME_WAIT状态也称为2MSL等待状态。每个TCP必须选择一个报文段最大生存时间(MSL)。它是任何报文段被丢弃前在网络的最长时间。
      处理原则:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2MSL。这样可以让TCP再次发送最后的ACK以避免这个ACK丢失(另一端超时并重发最后的FIN)。这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口不能被使用。
    
    7、平静时间
      TCP在重启的MSL秒内不能建立任何连接,这就是平静时间。
    8、FIN_WAIT_2状态
      在FIN_WAIT_2状态我们已经发出了FIN,并且另一端也对它进行了确认。只有另一端的进程完成了这个关闭,我们这端才会从 FIN_WAIT_2状态进入TIME_WAIT状态。这意味着我们这端可能永远保持这个状态,另一端也将处于CLOSE_WAIT状态,并一直保持这个状态直到应用层决定进行关闭。
    9、复位报文段
      TCP首部的RST位是用于复位的。一般,无论合适一个报文端发往相关的连接出现错误,TCP都会发出一个复位报文段。主要情况:
    (1)到不存在的端口的连接请求;
    (2)异常终止一个连接。
    
    10、同时打开
      为了处理同时打开,对于同时打开它仅建立一条连接而不是两条连接。两端几乎在同时发送SYN,并进入SYN_SENT状态。当每一端收到SYN时,状态变为SYN_RCVD,同时他们都再发SYN并对收到的SYN进行确认。当双方都收到SYN及相应的ACK时,状态都变为ESTABLISHED。一个同时打开的连接需要交换4个报文段,比正常的三次握手多了一次。
    
    11、 同时关闭
      当应用层发出关闭命令,两端均从ESTABLISHED变为FIN_WAIT_1。这将导致双方各发送一个FIN,两个FIN经过网络传送后分别到达另一端。收到FIN后,状态由FIN_WAIT_1变为CLOSING,并发送最后的ACK。当收到最后的ACK,状态变为TIME_WAIT。同时关闭和正常关闭的段减缓数目相同。
    
    12、TCP选项
      每个选项的开始是1字节的kind字段,说明选项的类型。 
    
       Kind=1:选项表结束(1字节)   Kind=1:无操作(1字节)   Kind=2:最大报文段长度(4字节)   Kind=3:窗口扩大因子(4字节)   Kind=8:时间戳(10字节)
    三、TCP的超时和重传
    
      对于每个TCP连接,TCP管理4个不同的定时器。
      (1) 重传定时器用于当希望收到另一端的确认。
      (2) 坚持定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
      (3) 保活定时器可检测到一个空闲连接的另一端何时崩溃或重启。
      (4) 2MSL定时器测量一个连接处于TIME_WAIT状态的时间。
    
    1、往返时间测量
      TCP超时和重传重最重要的就是对一个给定连接的往返时间(RTT)的测量。由于路由器和网络流量均会变化,因此TCP应该跟踪这些变化并相应地改变超时时间。首先TCP必须测量在发送一个带有特别序号地字节和接收到包含该字节地确认之间的RTT。
    
    2、拥塞避免算法
      该算法假定由于分组收到损坏引起的丢失是非常少的,因此分组丢失就意味着在源主机和目的主机之间的某处网络上发生了阻塞。有两种分组丢失的指示:发生超时和收到重复的确认。拥塞避免算法需要对每个连接维持两个变量:一个拥塞窗口cwnd和一个慢启动门限ssthresh。
      (1) 对一个给定的连接,初始化cwnd为1个报文段,ssthresh为65535个字节。
      (2) TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小。拥塞避免是发送方使用的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。
      (3) 当拥塞发生时,ssthresh被设置为当前窗口大小的一般(cwnd和接收方通告窗口大小的最小值,但最小为2个报文段)。此外,如果是超时引起了拥塞,则cwnd被设置为1个报文段。
      (4) 当新的数据被对方确认时,就增加cwnd,但增加的方法依赖与是否正在进行慢启动或拥塞避免。如果cwnd小于或等于ssthresh,则正在进行慢启动,否则正在进行拥塞避免。
    
    3、快速重传和快速恢复算法
      如果我们一连串收到3个或以上的重复ACK,就非常可能是一个报文段丢失了。于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出。
     (1) 当收到第3个重复的ACK时,将ssthresh设置为当前拥塞窗口cwnd的一半,重传丢失的报文段,设置cwnd为ssthresh加上3倍的报文段大小。
     (2) 每次收到另一个重复的ACK时,cwnd增加1个报文段大小并发送一个1个分组,如果允许的话。
     (3)当下一个确认新数据的ACK到达时,设置cwnd为ssthresh,这个ACK应该时在进行重传后的一个往返时间内对步骤1重重传的确认。另外,这个 ACK也应该是对丢失的分组和收到的第一个重复的ACK之间的所有中间报文段的确认。
    
    4、 ICMP差错
      TCP如何处理一个给定的连接返回的ICMP差错。TCP能够遇到的最常见的ICMP差错就是源站抑制、主机不可达和网络不可达。
     (1) 一个接收到的源站抑制引起拥塞窗口cwnd被置为1个报文段大小来发起慢启动,但是慢启动门限ssthresh没有变化,所以窗口将打开直到它开放了所有的通路或者发生了拥塞。
     (2) 一个接收到的主机不可达或网络不可达实际都被忽略,因为这两个差错都被认为是短暂现象。TCP试图发送引起该差错的数据,尽管最终有可能会超时。
    
    5、重新分组:
      当TCP超时并重传时,它并不一定要重传同样的报文段,相反,TCP允许进行重新分组而发送一个较大的报文段。这是允许的,因为TCP是使用字节序号而不是报文段序号来进行识别它所要发送的数据和进行确认。
    
    四、TCP的坚持定时器
    
       ACK的传输并不可靠,也就是说,TCP不对ACK报文段进行确认,TCP只确认那些包含数据的ACK报文段。为了防止因为ACK报文段丢失而双方进行等待的问题,发送方用一个坚持定时器来周期性地向接收方查询。这些从发送方发出地报文段称为窗口探查。
    
    五、TCP的保活定时器
       如果一个给定的连接在2小时内没有任何动作,那么服务器就向客户发送一个探查报文段。客户主机必须处于以下4个状态之一。
       (1) 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方的正常工作的。服务器在2小时内将保活定时器复位。
       (2) 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务器将不能收到对探查的响应,并在75秒后超时。总共发送10个探查,间隔75秒。
       (3) 客户主机崩溃并已经重新启动。这是服务器将收到一个对其保活探查的响应,但这个响应是一个复位,使得服务器终止这个连接。
      (4) 客户主机正常运行,但是从服务器不可达。
    
    六、TCP的一些性能
    
    1、 路径MTU发现:
      TCP的路径MTU发现按如下方式进行:在连接建立时,TCP使用输出接口或对段声明的MSS中的最下MTU作为其实的报文段大小。路径MTU发现不允许TCP超过对端声明的MSS。如果对端没有指定一个MSS,则默认为536。
      一旦选定了起始的报文段大小,在该连接上的所有被TCP发送的IP数据报都将被设置DF位。如果中间路由器需要对一个设置了DF标志的数据报进行分片,它就丢弃这个数据报,并产生一个ICMP的“不能分片”差错。
      如果收到这个ICMP差错,TCP就减少段大小并进行重传。如果路由器产生的是一个较新的该类ICMP差错,则报文段大小被设置位下一跳的MTU减去 IP和TCP的首部长度。如果是一个较旧的该类ICMP差错,则必须尝试下一个可能的最小MTU。
    
    2、 长肥管道
      一个连接的容量=带宽X时延(RTT)。具有大的带宽时延乘积的网络称为长肥网络(LFN)。一个运行在LFN的TCP连接称为长肥管道。管道可以被水平拉长(一个长的RTT),或被垂直拉高(较高的带宽),或两个方向拉伸。
    
    3、窗口扩大选项:
      窗口扩大选项使TCP的窗口定义从16位增加到32位,这并不是通过修改TCP首部来实现的,TCP首部仍然使用16位,而是通过定义一个选项实现对16位的扩大操作来完成的。
    
    4、时间戳选项:
      时间戳选项使发送方在每个报文段中放置一个时间戳值。接收方在确认中返回这个数值,从而允许发送方为每一个收到的ACK计算RTT。
    展开全文
  • 学习计算机网络时我们一般采用折中的办法,也就是中和OSI和TCP/IP的优点,采用一种只有五层协议的体系结构,这样既简单又能将概念阐述清楚。 自上而下简单的介绍各层的作用: 1.应用应用层(application-layer...

    学习计算机网络时我们一般采用折中的办法,也就是中和OSI和TCP/IP的优点,采用一种只有五层协议的体系结构,这样既简单又能将概念阐述清楚。
    在这里插入图片描述
    自上而下简单的介绍各层的作用:


    1.应用层

    应用层(application-layer)的任务是通过应用进程间的交互拉完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)键通信和交互的规则。对用不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等等。我们把应用层交互的数据单元成为报文。


    2.传输层
    传输层(transport-layer)的主要任务是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个传输层服务。由于一台主机可同时运行多个线程,因此传输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面传输层的服务,分用和复用相反,是传输层把收到的信息分别交付上面应用层中的相应进程。

    传输层主要使用一下两种协议:
    1)传输控制协议TCP(Transmission Control Protocol)–提供面向连接的,可靠的数据传输服务。
    2)用户数据协议UDP(User Datagram Protocol)–提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。


    3.网络层
    在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送。在发送数据时,网络层把传输层产生的报文段或用户数据包封装成分组和包进行传送。在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报,简称数据报

    这里要注意:不要把传输层的“用户数据报UDP”和网络层的“IP数据报”弄混。另外,无论是哪一层的数据单元,都可笼统的用“分组”来表示。

    这里强调指出,网络层中的“网络”二字已经不是我们通常谈到的具体网络,而是指计算机体系结构模型中第三层的名称。

    互联网是由大量的异构(heterogeneous)网络通过路由器(router )相互连接起来的额。互联网使用的额网络层洗衣是无连接的网际协议(Intert Protocol)和许多裸游选择协议,因此互联网的网络层也叫做网际层或IP层


    4.数据链路层

    数据链路层(data link layer)同城简称链路层。两台主机之间的数据传输,总是一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。

    在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可以从中提出数据部分,上交给网络层。控制信息还使用接收端能够检测到所收到的帧中有误差值。如果发现误差,数据链路层键剑三的丢弃这个出了差错的栈,以避免继续在网络中传送下去拜拜浪费网络资源,如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要检错,而且还要纠错),那么就要采用可靠性传输协议来纠正出现的差错。这种方法会使链路层的洗衣复杂些。


    5.物理层

    在物理层上所传送的数据单位是比特。物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示时间电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

    在互联网使用的各种协议中最重要的和最著名的就是TCP/IP两个协议。现在人们检查提到的TCP/IP并不一定单指TCP和IP这两个具体的协议,而往往表示互联网所使用的整个TCP/IP协议族。


    七层体系结构图:
    在这里插入图片描述

    展开全文
  • TCP/IP 协议

    2019-10-08 14:59:18
    应用层、传输层、网络层、链路层会一次对请求进行包装并携带对应的首部,最后会在链路层生成以太网数据包,数据包会通过物理物质传输到对方主机,接收到数据包之后,会采用对应的协议进行拆包,然后应用程序将数据...

    简单说明:

    一个主机的数据经过哪些过程发送到另一个主机上
    采用四层结构:应用层、传输层、网络层、链路层

    总体流程:

    在这里插入图片描述
    http发送一个请求,应用层、传输层、网络层、链路层会一次对请求进行包装并携带对应的首部,最后会在链路层生成以太网数据包,数据包会通过物理物质传输到对方主机,接收到数据包之后,会采用对应的协议进行拆包,然后应用程序将数据进行处理

    物理介质:

    电信号(0和1)的传输方式,比如说光缆、无线电波等,物理介质的不同决定了
    传输的速率距离等的不同

    链路层:

    网络通讯中发送数据是根据0和1已字节为单位进行分组,并且标识每一组电信号的特征按照顺序发送,以太网协议规定一组电信号是一个数据包,一个数据包称为一帧,

    完整的以太网数据包包括:首部 数据 尾部

    • 首部:固定14个字节,包含目标的MAC地址、源MAC地址和类型
    • 数据:大于等于46个字节,小于等于1500个字节,若传输的数据过长,可以分成多个帧发送
    • 尾部:固定4个字节,确认数据包在传输过程中是否损坏
    • 以太网如何区分接收方的身份:以太网规定接入网络的设备必须安装网卡,数据包必须从一个网卡传送到另一个网卡,而网卡地址是数据包首部的MAC地址,MAC地址是每个网卡的身份标识,全球唯一,MAC采用十六进制标识,共6个字节,前三个是厂商编号后三个是网卡流水号(2C-9F-3E-12-3G-34)以太网采用广播的形式发送给子网内的所有主机,子网会读取首部的MAC地址,然后和自己的MAC地址进行对比,若相同则处理,若不同则丢弃

    链路层作用:

    对电信号进行分组并形成特定意义的数据帧,然后以广播的形式通过物理
    介质发送到接收方

    网络层:

    有三个协议:IP协议、ARP协议、路由协议

    IP协议

    解决问题:

    MAC地址只和厂商有关,无法通过MAC地址判断主机是否属于同一个
    子网;有IPv4和IPv6,IPv4是一个32位的地址,采用4个十进制数字表示,分为两个部分前面部分代表网络地址,后面代表主机在局域网中的地址,若两个IP地址在同一个子网内,则网络地址一定相同,可以根据IP地址和子网掩码通过按位与运算后得到网络地址,由于发送者和接收者的IP地址都是已知的,所以可以通过IP地址中的子网掩码对两个IP地址进行运算符运算后判断是否在同一个子网

    ARP协议:

    地址解析协议,能够根据IP地址获得MAC地址的一个网络层协议

    解决问题:

    获取接收者的MAC地址

    原理:

    每个主机接收以太网数据包之后,拿到标头中的IP地址和自己的IP地址进行比较
    ,若相同则返回自己的MAC地址,若不同则丢弃数据包,ARP会接收返回的消息,以此来确定MAC地址,同事ARP还会将返回的MAC地址和对应的额IP地址存放到本机的ARP缓存中保存一段时间,下次请求可以直接查询ARP缓存,CMD中输入 arp -a可以查看本机缓存的ARP数据

    路由协议:

    说明:

    通过ARP协议原理中可以看出ARP的MAC地址只局限于同一个子网中,因此网络层引入了路由协议,首先通过IP协议判断是否是同一个子网,若是则进行操作,若不是以太网会将数据包转发给本子网的网关进行路由,网关是互联网中子网和子网之间的桥梁,所以网关会进行多次转发,最终找到目标IP的子网,然后通过ARP获取MAC,通过广播形式将数据包发送给接收方,完成这个路由协议的物理设备是路由器

    IP数据包:

    包含首部和数据

    • 首部共20个字节,包含目标的IP地址和源IP地址,目标IP地址是网关路由的线索和依据
    • 数据长度为65515字节,理论上IP数据包的总长度是65535,但是由于以太网数据包最大为1500个字节,所以若超过这个大小,就要对IP数据包就行分割,多帧发送

    网络层作用:

    定义网络地址,区分网段,MAC寻址

    传输层:

    说明:

    链路层定义了主机的MAC地址,网络层定义了IP地址,这两个地址就可以将数据包从一个主机发送到另一个主机上,但是实际上是从一个主机的应用程序发送到另一个主机的应用程序,但是每台电脑都有很多应用程序,所以无法确定发送到主机的哪个应用程序,传输层引入了UDP协议,UDP协议定义了端口,同一个主机上的每个应用程序都要指定一个端口号,并规定网络中传输的数据包也必须加上端口号,这样就可以找到对应的应用程序

    UDP数据包包括首部和数据

    • 首部:8个字节,包括源端口和目标端口
    • 数据:65527个字节,
    • 说明:UDP协议没有确认机制,数据包一旦发出,无法确定是否接收到,可靠性差,所以TCP协议诞生了,TCP是传输控制协议,它是一个有确认机制的UDP协议,每次发送数据包都要求确认,若一个数据包丢失,接收不到确认,那么就会重新发送这个数据包,TCP协议建立了三次对话的确认机制,经过三次对话之后,会向主机发送数据,而UDP不建立连接直接发送数据,TCP虽然保证了数据不被丢失,但是消耗资源较多,传输速度慢,TCP数据包与UDP一样,都是由首部和数据组成,但是TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不超过IP数据包长度,确保TCP数据包不再分割

    传输层作用:

    定义接口,使用端口完成应用程序通信

    应用层:

    传送到应用程序的数据是字节流,不能被程序识别,操作性差,因此应用层定义了协议规范数据格式,比如说HTTP,FTP等,HTTP举例:
    在这里插入图片描述
    在Resquest Headers 中,Accept 表示客户端期望接收的数据格式,在 Response Headers 中,ContentType 表示服务端响应的数据格式,这里定义的格式,一般是和 Resquest Headers 中 Accept 定义的格式是一致的。
    有了这个规范之后,服务端接收到数据之后,就能正确解析数据,请求处理完之后,再按照客户端要求的格式返回,客户端接收到数据之后,按照服务端返回的格式进行解析

    应用层作用:

    定义数据格式并按照对应格式进行解析数据

    展开全文
  • 面试从网卡 聊到tcpip协议栈,再到应用程序 TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构,分别是...

    面试从网卡 聊到tcpip协议栈,再到应用程序

    TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协议来完成自己的需求。由于我们大部分时间都工作在应用层,下层的事情不用我们操心;其次网络协议体系本身就很复杂庞大,入门门槛高,因此很难搞清楚TCP/IP的工作原理,通俗一点讲就是,一个主机的数据要经过哪些过程才能发送到对方的主机上。 接下来,我们就来探索一下这个过程。

    0、物理介质

    物理介质就是把电脑连接起来的物理手段,常见的有光纤、双绞线,以及无线电波,它决定了电信号(0和1)的传输方式,物理介质的不同决定了电信号的传输带宽、速率、传输距离以及抗干扰性等等。

    TCP/IP协议栈分为四层,每一层都由特定的协议与对方进行通信,而协议之间的通信最终都要转化为 0 和 1 的电信号,通过物理介质进行传输才能到达对方的电脑,因此物理介质是网络通信的基石。

    下面我们通过一张图先来大概了解一下TCP/IP协议的基本框架:

    当通过http发起一个请求时,应用层、传输层、网络层和链路层的相关协议依次对该请求进行包装并携带对应的首部,最终在链路层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接收到数据包以后,然后再一层一层采用对应的协议进行拆包,最后把应用层数据交给应用程序处理。

    网络通信就好比送快递,商品外面的一层层包裹就是各种协议,协议包含了商品信息、收货地址、收件人、联系方式等,然后还需要配送车、配送站、快递员,商品才能最终到达用户手中。

    一般情况下,快递是不能直达的,需要先转发到对应的配送站,然后由配送站再进行派件。

    配送车就是物理介质,配送站就是网关, 快递员就是路由器,收货地址就是IP地址,联系方式就是MAC地址。 

    快递员负责把包裹转发到各个配送站,配送站根据收获地址里的省市区,确认是否需要继续转发到其他配送站,当包裹到达了目标配送站以后,配送站再根据联系方式找到收件人进行派件。  

    有了整体概念以后,下面我们详细了解一下各层的分工。

    1、链路层

    网络通信就是把有特定意义的数据通过物理介质传送给对方,单纯的发送 0 和 1 是没有意义的,要传输有意义的数据,就需要以字节为单位对 0 和 1 进行分组,并且要标识好每一组电信号的信息特征,然后按照分组的顺序依次发送。以太网规定一组电信号就是一个数据包,一个数据包被称为一帧, 制定这个规则的协议就是以太网协议。一个完整的以太网数据包如下图所示:

    整个数据帧由首部数据尾部三部分组成,首部固定为14个字节,包含了目标MAC地址、源MAC地址和类型;数据最短为46个字节,最长为1500个字节,如果需要传输的数据很长,就必须分割成多个帧进行发送;尾部固定为4个字节,表示数据帧校验序列,用于确定数据包在传输过程中是否损坏。因此,以太网协议通过对电信号进行分组并形成数据帧,然后通过物理介质把数据帧发送给接收方。那么以太网如何来识接收方的身份呢?

    以太网规协议定,接入网络的设备都必须安装网络适配器,即网卡, 数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接收地址,也就是帧首部所包含的MAC地址,MAC地址是每块网卡的身份标识,就如同我们身份证上的身份证号码,具有全球唯一性。MAC地址采用十六进制标识,共6个字节, 前三个字节是厂商编号,后三个字节是网卡流水号,例如 4C-0F-6E-12-D2-19

    有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。

    所以链路层的主要工作就是对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。

    2、网络层

    对于上面的过程,有几个细节问题值得我们思考:

    发送者如何知道接收者的MAC地址?

    发送者如何知道接收者和自己同属一个子网?

    如果接收者和自己不在同一个子网,数据包如何发给对方?

    为了解决这些问题,网络层引入了三个协议,分别是IP协议ARP协议路由协议。

    【1】IP协议

    通过前面的介绍我们知道,MAC地址只与厂商有关,与所处的网络无关,所以无法通过MAC地址来判断两台主机是否属于同一个子网。

    因此,网络层引入了IP协议,制定了一套新地址,使得我们能够区分两台主机是否同属一个网络,这套地址就是网络地址,也就是所谓的IP地址。

    IP地址目前有两个版本,分别是IPv4IPv6,IPv4是一个32位的地址,常采用4个十进制数字表示。IP协议将这个32位的地址分为两部分,前面部分代表网络地址,后面部分表示该主机在局域网中的地址。由于各类地址的分法不尽相同,以C类地址192.168.24.1为例其中前24位就是网络地址,后8位就是主机地址。因此, 如果两个IP地址在同一个子网内,则网络地址一定相同。为了判断IP地址中的网络地址,IP协议还引入了子网掩码, IP地址和子网掩码通过按位与运算后就可以得到网络地址。

    由于发送者和接收者的IP地址是已知的(应用层的协议会传入), 因此我们只要通过子网掩码对两个IP地址进行AND运算后就能够判断双方是否在同一个子网了。

    【2】ARP协议

    即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。其工作原理如下:

    ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包,最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。cmd输入 arp -a 就可以查询本机缓存的ARP数据。

    【3】路由协议

    通过ARP协议的工作原理可以发现,ARP的MAC寻址还是局限在同一个子网中,因此网络层引入了路由协议,首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过ARP协议查询对应的MAC地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是通过广播形式将数据包发送给接收方。

    而完成这个路由协议的物理设备就是路由器,在错综复杂的网络世界里,路由器扮演者交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。

    【4】IP数据包

    在网络层被包装的数据包就叫IP数据包,IPv4数据包的结构如下图所示:

    IP数据包由首部和数据两部分组成,首部长度为20个字节,主要包含了目标IP地址和源IP地址,目标IP地址是网关路由的线索和依据;数据部分的最大长度为65515字节,理论上一个IP数据包的总长度可以达到65535个字节,而以太网数据包的最大长度是1500个字符,如果超过这个大小,就需要对IP数据包进行分割,分成多帧发送。

    所以,网络层的主要工作是定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由。

    3、传输层

    链路层定义了主机的身份,即MAC地址, 而网络层定义了IP地址,明确了主机所在的网段,有了这两个地址,数据包就从可以从一个主机发送到另一台主机。但实际上数据包是从一个主机的某个应用程序发出,然后由对方主机的应用程序接收。而每台电脑都有可能同时运行着很多个应用程序,所以当数据包被发送到主机上以后,是无法确定哪个应用程序要接收这个包。

    因此传输层引入了UDP协议来解决这个问题,为了给每个应用程序标识身份,UDP协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号,并且规定网络中传输的数据包必须加上端口信息。 这样,当数据包到达主机以后,就可以根据端口号找到对应的应用程序了。UDP定义的数据包就叫做UDP数据包,结构如下所示:

    UDP数据包由首部和数据两部分组成,首部长度为8个字节,主要包括源端口和目标端口;数据最大为65527个字节,整个数据包的长度最大可达到65535个字节。

    UDP协议比较简单,实现容易,但它没有确认机制, 数据包一旦发出,无法知道对方是否收到,因此可靠性较差,为了解决这个问题,提高网络可靠性,TCP协议就诞生了,TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。

    为了保证传输的可靠性,TCP 协议在 UDP 基础之上建立了三次对话的确认机制,也就是说,在正式收发数据前,必须和对方建立可靠的连接。由于建立过程较为复杂,我们在这里做一个形象的描述:

    主机A:我想发数据给你,可以么?

    主机B:可以,你什么时候发?

    主机A:我马上发,你接着!

    经过三次对话之后,主机A才会向主机B发送正式数据,而UDP是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发过去了。所以 TCP 能够保证数据包在传输过程中不被丢失,但美好的事物必然是要付出代价的,相比 UDP,TCP 实现过程复杂,消耗连接资源多,传输速度慢。

    TCP 数据包和 UDP 一样,都是由首部和数据两部分组成,唯一不同的是,TCP 数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常 TCP 数据包的长度不会超过IP数据包的长度,以确保单个 TCP 数据包不必再分割。

    总结一下,传输层的主要工作是定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性

    4、应用层

    理论上讲,有了以上三层协议的支持,数据已经可以从一个主机上的应用程序传输到另一台主机的应用程序了,但此时传过来的数据是字节流,不能很好的被程序识别,操作性差。因此,应用层定义了各种各样的协议来规范数据格式,常见的有 HTTP、FTP、SMTP 等,HTTP 是一种比较常用的应用层协议,主要用于B/S架构之间的数据通信,其报文格式如下:

    在 Resquest Headers 中,Accept 表示客户端期望接收的数据格式,而 ContentType 则表示客户端发送的数据格式;在 Response Headers 中,ContentType 表示服务端响应的数据格式,这里定义的格式,一般是和  Resquest Headers 中 Accept 定义的格式是一致的。

    有了这个规范以后,服务端收到请求以后,就能正确的解析客户端发来的数据,当请求处理完以后,再按照客户端要求的格式返回,客户端收到结果后,按照服务端返回的格式进行解析。

    所以应用层的主要工作就是定义数据格式并按照对应的格式解读数据。

    5、全流程

    首先我们梳理一下每层模型的职责:

    • 链路层:对0和1进行分组,定义数据帧,确认主机的物理地址,传输数据;
    • 网络层:定义IP地址,确认主机所在的网络位置,并通过IP进行MAC寻址,对外网数据包进行路由转发;
    • 传输层:定义端口,确认主机上应用程序的身份,并将数据包交给对应的应用程序;
    • 应用层:定义数据格式,并按照对应的格式解读数据。

    然后再把每层模型的职责串联起来,用一句通俗易懂的话讲就是:

    当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播方式,通过传输介质发送给对方主机。而对于不同网段,该数据包首先会转发给网关路由器,经过多次转发后,最终被发送到目标主机。目标机接收到数据包后,采用对应的协议,对帧数据进行组装,然后再通过一层一层的协议进行解析,最终被应用层的协议解析并交给服务器处理。

    6、总结

    以上内容是对TCP/IP四层模型做了简单的介绍,而实际上每一层模型都有很多协议,每个协议要做的事情也很多,但我们首先得有一个清晰的脉络结构,掌握每一层模型最基本的作用,然后再去丰富细枝末节的东西,也许会更容易理解。

    不足之处还请斧正,欢迎进群973961276来跟诸位技术大牛一起交流。

    展开全文
  • 计算机网络体系结构有哪些 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。应用应用层(application-layer)的任务是...
  • 当设定为[Enabled](启动)时,这个项目在系统电源开启之后,可加速POST(Power On Self Test)的程序。BIOS会在POST过程当中缩短或是跳过一些检查项目,从而加速启动等待的时间! Hard Disk Boot Priority(硬盘...
  • 常用端口总结

    万次阅读 2017-06-11 21:19:26
    TCP和UDP采用16bit的端口浩来识别应用程序。那么常用的知名端口号有哪些呢?
  • 一 OSI与TCP/IP各层的结构与功能,都有哪些协议? 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 结合互联网的情况,...
  • 计算机网络

    2020-02-22 21:42:03
    一 OSI与TCP/IP各层的结构与功能,都有哪些协议? 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 1.1 应用应用层...
  • 一 OSI与TCP/IP各层的结构与功能,都有哪些协议? 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 结合互联网的情况,...
  • 计算机网络基础

    2020-08-09 17:11:05
    一 OSI与TCP/IP各层的结构与功能,都有哪些协议? 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 结合互联网的情况,...
  • OSI与TCP/IP各层的结构与功能,都有哪些协议? 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 结合互联网的情况,...
  • 网络

    2020-07-03 14:55:09
    OSI与TCP/IP各层的结构与功能,都有哪些协议? 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 结合互联网的情况,...
  • 计算机网络整理

    2020-04-11 21:12:35
    OSI与TCP/IP各层的结构与功能,都有哪些协议 ...会话层:不同机器上的用户之间建立以及管理会话,建立和管理应用程序间的通信,主要协议:SSL、RPC 传输层:接收会话层的数据,在必要时把数据进行分割,并...
  • 大厂春招面试题(五)计算机网络

    千次阅读 2017-03-30 13:29:32
    个人觉得如果要达到计算机大牛,无论主攻那个技术领域,计算机网络中一些解决问题的思想都能够让你受益颇深。 ...应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、
  • 数据库连接池配置

    2021-02-18 14:23:37
    数据库连接池是负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,可以视作一个存放数据库连接的容器。 数据库连接池采用了资源池设计模式,用于资源共享,避免资源的频繁分配与释放...
  • 1.机器宕机居然是机器的问题,那个机器,不管上面运行的是我们的应用程序还是模拟器,都会宕机。换了其他的几台服务器,都没出现宕机的问题。 2.buffer的设置:我们一个消息的长度是20个字节。每秒钟2000条消息,...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...
  • 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:711515032X 上架时间:2006-8-25 出版日期:2006 年10月 开本:16开 页码:737 版次:1-1 内容简介  本书是一本关于Oracle 9i & 10g数据库体系结构的权威...
  • 2.3.3 TCP/IP连接的基本原理 57 2.4 小结 59 第3章 文件 60 3.1 参数文件 61 3.1.1 什么是参数 62 3.1.2 遗留的init.ORA参数文件 65 3.1.3 服务器参数文件 67 3.1.4 参数文件小结 72 3.2 跟踪文件 73 3.2.1...
  • 4.5.2 你们线上应用的JVM参数有哪些。 4.5.3 g1和cms区别,吞吐量优先和响应优先的垃圾收集器选择。 4.5.4 怎么打出线程栈信息。 开源框架 4.5.5 简单讲讲tomcat结构,以及其类加载器流程,线程模型等。 4.5.6 ...
  • 耗时的操作使用线程,提高应用程序响应 2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。 3.多CPU系统中,使用线程提高CPU利用率 4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程...
  • 7) SDP即服务发现协议(Service Discovery Protocol),应用程序使用该协议找出哪些服务可用,并确定这些可用服务的特性。 8) 串口仿真协议(RFCOMM)是一种简单传输协议,可在L2CAP之上仿真RS-232(EIATIA-232-E...
  • 2、锻炼学生在设计的过程中,建立清晰的类层次,应用继承和多态等面向对象的编程思想; 3、通过本课程设计,加深对面向对象程序设计课程所学知识的理解,熟练掌握和巩固C++语言的基本知识和语法规范,深刻体会面向...
  • 问题1-7:TCP/IP的体系结构到底是四层还是五层? 问题1-8:我们常说“分组交换”。但又常说“路由器转发IP数据报”或“路由器转发帧”。究竟“分组”一词应当用在什么场合? 问题1-9:到商店购买可一个希捷公司生产...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    要想查询系统提供哪些Shell,可以使用chsh -l 命令,见图1所示。 图1 系统可以使用的Shell类型 从图1中可以看到,笔者系统中可以使用的Shell有bash(缺省)、csh、sh、tcsh四种。 exit 1.作用 exit命令的作用是...
  • 问题5-9:TCP都使用哪些计时器? 问题5-10:是否TCP和UDP都需要计算往返时间RTT? 问题5-11:假定TCP开始进行连接建立。当TCP发送第一个SYN报文段时,显然无法利用教材中5.6.3节所介绍的方法计算往返时间RTT。那么...
  • java程序的初始化顺序 请说出作用域public,private,protected,以及不写时的区别 为什么java中有些接口没有任何方法 java中的clone方法有什么作用 面向对象有哪些特征 面向对象的开发方式有什么优点 组合和继承有...

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

哪些应用程序采用tcp