精华内容
下载资源
问答
  • DL-T-790-433-2005数据通信协议-数据链路层-面向连接协议.pdf 介绍了关于DL-T-790-433-2005数据通信协议-数据链路层-面向连接协议的详细说明,提供电力设计规范的技术资料的下载。
  • 无连接和面向连接协议的区别

    万次阅读 多人点赞 2018-10-15 16:01:26
      网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这...

      网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个问题与上下文有些关联:很显然,如果两台计算机要进行通信,就必须以某种形式“连接”起来,那“无连接通信”又是什么意思呢?

      答案是:面向连接和无连接指的都是协议。也就是说,这些术语指的并不是物理介质本身,而是用来说明如何在物理介质上传输数据的。面向连接和无连接协议可以,而且通常也确实会共享同一条物理介质。

      如果两者的区别与承载数据的物理介质无关,又和什么有关呢?它们的本质区别在于,对无连接协议来说,每个分组的处理都独立于所有其他分组,而对面向连接的协议来说,协议实现则维护了与后继分组有关的状态信息。

    一、无连接协议和面向连接协议的概念

      无连接协议中的分组被称为数据报(datagram),每个分组都是独立寻址,并由应用程序发送的。从协议的角度来看,每个数据报都是一个独立的实体,与在两个相同的对等实体之间传送的任何其他数据报都没有关系,这就意味着协议很可能是不可靠的。也就是说,网络会尽最大努力传送每一个数据报,但并不保证数据报不丢失、不延迟或者不错序传输。

      另一方面,面向连接的协议则维护了分组之间的状态,使用这种协议的应用程序通常都会进行长期的对话。记住这些状态,协议就可以提供可靠的传输。比如,发送端可以记住哪些数据已经发送出去了但还未被确认,以及数据是什么时候发送的。如果在某段时间间隔内没有收到确认,发送端可以重传数据。接收端可以记住已经收到了哪些数据,并将重复的数据丢弃。如果分组不是按序到达的,接收端可以将其保存下来,直到逻辑上先于它的分组到达为止。

      典型的面向连接协议有三个阶段。第一阶段,在对等实体间建立连接。接下来是数据传输阶段,在这个阶段中,数据在对等实体间传输。最后,当对等实体完成数据传输时,连接被拆除

      一种标准的类比是:使用无连接协议就像寄信,而使用面向连接的协议就像打电话。

    二、UDP和TCP协议

      既然无连接协议有这么多的缺点,大家可能会奇怪,为什么还要使用这种协议呢?我们会看到,在很多情况下,使用无连接协议构建应用程序都是有意义的。比如,使用无连接协议可以很方便地支持一对多和多对一通信,而面向连接协议通常都需要多个独立的连接才能做到。但更重要的是,无连接协议是构建面向连接协议的基础。TCP/IP 是基于一个4层的协议栈,如下图所示:
    在这里插入图片描述
      如图所示,TCP 和 UDP 都是构建在 IP 之上的。因此,IP 是构建整个 TCP/IP 协议族的基础。但 IP 提供的是一种尽力而为的、不可靠的无连接服务。它接收来自其上层的分组,将它们封装在一个 IP 分组中,根据路由为分组选择正确的硬件接口,从这个接口将分组发送出去。一旦将分组发送出去了,IP 就不再关心这个分组了。和所有无连接协议一样,它将分组发送出去之后就不再记得这个分组了。这种简单性也是 IP 的主要优点。

    1、TCP—面向连接服务

    • 它为 TCP 段中的数据提供了校验和。这样有助于确保抵达目的地的数据在传输过程中不会被网络损坏;

    • 它为每字节分配了一个序列号,这样,如果数据抵达目的地时真的错序了,接收端也能够按照恰当的顺序将其重装起来。当然,TCP 并没有为每字节都附加一个序列号。实际上,每个 TCP 段的首部都包含了段中第一字节的序列号。这样,就隐含地知道了段中其他字节的序列号。

    • TCP 提供了一种确认-重传机制,以确保最终每个段都会被传送出去。

    2、UDP—无连接服务

    • 它提供了一个可选的校验和来检测数据的损坏情况。尽管 IP 也有校验和,但它只对 IP 分组首部进行计算,所以,TCP 和 UDP 也都提供了校验和来保护它们自己的首部和数据;

    • UDP 向 IP添加的第二项特性就是端口的概念。

      回到与电话/寄信的类比中来,我们可以把 TCP 连接中的网络地址当作一个办公室总机的电话号码,把端口号当作办公室中某台正被呼叫的特定电话的分机号。同理,可以将UDP网络地址当作一座公寓楼的地址,并把端口号当作公寓楼大厅中的个人邮箱。

    转自:https://blog.csdn.net/tennysonsky/article/details/44455565

    展开全文
  • 网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个...

    网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个问题与上下文有些关联:很显然,如果两台计算机要进行通信,就必须以某种形式“连接”起来,那“无连接通信”又是什么意思呢?

     

    答案是:面向连接和无连接指的都是协议也就是说,这些术语指的并不是物理介质本身,而是用来说明如何在物理介质上传输数据的。面向连接和无连接协议可以,而且通常也确实会共享同一条物理介质。

    如果两者的区别与承载数据的物理介质无关,又和什么有关呢?它们的本质区别在于,对无连接协议来说,每个分组的处理都独立于所有其他分组,而对面向连接的协议来说,协议实现则维护了与后继分组有关的状态信息。

     

    无连接协议中的分组被称为数据报(datagram),每个分组都是独立寻址,并由应用程序发送的。从协议的角度来看,每个数据报都是一个独立的实体,与在两个相同的对等实体之间传送的任何其他数据报都没有关系,这就意味着协议很可能是不可靠的。

    展开全文
  • TCP-面向连接的传输层协议

    千次阅读 2020-12-04 17:07:40
    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。许多高层应用协议(包括HTTP、FTP)都是以它为基础的,TCP非常适合数据的连续传输。 传输控制协议TCP...


    传输控制协议(TCP,Transmission Control Protocol)是一种 面向连接的、 可靠的基于字节流传输层通信协议。许多高层应用协议(包括HTTP、FTP)都是以它为基础的,TCP非常适合数据的连续传输。
    传输控制协议TCP是为了在 不可靠的互联网络上提供 可靠的端到端字节流而专门设计的一个传输协议。

    主要特点

    TCP是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提供一条具有下列特点的通信方式:

    1. 基于字节流的方式;(流就是指不间断的数据结构)TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。
    2. 面向连接;面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。
    3. 可靠通信方式;对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
    4. 在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞
    5. 通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)

    TCP能够为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地送达网络上的其他计算机。因此,对可靠性要求高的数据通信系统往往使用TCP传输数据,但在正式收发数据前,通信双方必须首先建立连接。

    工作方式

    建立连接—三次握手

    TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。
    在这里插入图片描述

    • 第一次握手
      建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。等待服务器的确认;

    • 第二次握手
      服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,

    • 第三次握手
      当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。

    为什么 TCP 建立连接需要三次握手,而不是两次?

    这是因为这是为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误。

    三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。如果采用“三次握手”的话就不会出现这种情况,B端收到一个过时失效的报文段之后,向A端发出确认,此时A并没有要求建立连接,所以就不会向B端发送确认,这个时候B端也能够知道连接没有建立。

    问题的核心在于保证信道数据传输的可靠性,避免资源浪费
    在这里插入图片描述

    连接终止—四次挥手

    TCP 是全双工的,在断开连接时两端都需要发送 FIN 和 ACK。
    在这里插入图片描述

    • 第一次挥手: 若主机A 认为数据发送完成,则它需要向 主机B 发送连接释放请求;主机A(可以使客户端,也可以是服务器端),设置Sequence Number,向主机B发送一个FIN报文段;此时,主机A进入FIN_WAIT_1状态;这表示主机A没有数据要发送给主机B了;
    • 第二次挥手: 主机B收到了主机A发送的FIN报文段,向主机A回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机A进入FIN_WAIT_2状态;主机B告诉主机A,我“同意”你的关闭请求; B进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。
    • 第三次挥手: B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求。主机B向主机A发送FIN报文段,请求关闭连接,同时主机B进入LAST_ACK状态;
    • 第四次挥手: 主机A收到主机B发送的FIN报文段,向主机B发送ACK报文段,然后主机A进入TIME_WAIT状态;主机B收到主机A的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

    在这里插入图片描述
    在这里插入图片描述

    为什么要四次挥手

    TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

    为什么要等待2MSL

    MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间。
    原因有二:

    1. 保证TCP协议的全双工连接能够可靠关闭
    2. 保证这次连接的重复数据段从网络中消失

    第一点:如果主机1直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致主机2没有收到主机1最后回复的ACK。那么主机2就会在超时之后继续发送FIN,此时由于主机1已经CLOSED了,就找不到与重发的FIN对应的连接。所以,主机1不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。
    第二点:如果主机1直接CLOSED,然后又再向主机2发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达主机2,由于新连接和老连接的端口号是一样的,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。

    TCP流量控制

    如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
    利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
    设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 400 ”(这里的 rwnd 表示 receiver window) 。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。请注意,TCP的窗口单位是字节,不是报文段。假设每一个报文段为100字节长,而数据报文段序号的初始值设为1。大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。

    在这里插入图片描述
    从图中可以看出,B进行了三次流量控制。第一次把窗口减少到 rwnd = 300 ,第二次又减到了 rwnd = 100 ,最后减到 rwnd = 0 ,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。B向A发送的三个报文段都设置了 ACK = 1 ,只有在ACK=1时确认号字段才有意义。
    TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口控测报文段(携1字节的数据),那么收到这个报文段的一方就重新设置持续计时器。

    TCP拥塞控制

    1.慢开始和拥塞避免

    发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。
    发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
    慢开始算法:
    当主机开始发送数据时,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是 先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。
    通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。


    每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。
    另,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。
    为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。慢开始门限ssthresh的用法如下:

    当 cwnd < ssthresh 时,使用上述的慢开始算法。
    当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
    当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
    拥塞避免
    让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

    在这里插入图片描述

    无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送 方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。
    这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生 拥塞的路由器有足够时间把队列中积压的分组处理完毕。
    如下图,用具体数值说明了上述拥塞控制的过程。现在发送窗口的大小和拥塞窗口一样大。

    在这里插入图片描述

    2.快重传和快恢复

    快重传
    快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。
    在这里插入图片描述
    接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4。
    显然,接收方不能确认M4,因为M4是收到的失序报文段。根据 可靠传输原理,接收方可以什么都不做,也可以在适当时机发送一次对M2的确认。
    但按照快重传算法的规定,接收方应及时发送对M2的重复确认,这样做可以让 发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了 接收方的四个对M2的确认,其中后三个都是重复确认。
    快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必 继续等待M3设置的重传计时器到期。
    由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。

    快恢复
    与快重传配合使用的还有快恢复算法,其过程有以下两个要点:

    当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。
    与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为 慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
    在这里插入图片描述

    性能UDPTCP
    是否连接无连接面向连接
    是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
    连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
    传输方式面向报文面向字节流
    首部开销首部开销小,仅8字节首部最小20字节,最大60字节
    适用场景适用于实时应用(IP电话、视频会议、直播等)适用于要求可靠传输的应用,例如文件传输

    参考链接: 关于 TCP/IP,必知必会的十个问题.

    展开全文
  • 连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接; 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息; 面向数据报: ...

    TCP/IP 协议

    TCP:Transmission Control Protocol 传输控制协议

    TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议 和 传输层的TCP协议组成。

    通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

    IP层:

    • 接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层—TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。
    • IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

    TCP:

    • TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
    • TCP提供的是一种可靠的数据流服务,采用"带重传的肯定确认"技术来实现传输的可靠性。
    • TCP还采用一种称为"滑动窗口"的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。

    TCP 了解:

    TCP是一种传输层通信协议。
    它在应用程序间建立了一条虚拟链路。
    

    TCP具有6个特点:

    面向连接的传输;
    端到端的通信;
    高可靠性,确保传输数据的正确性,不出现丢失或乱序;
    全双工方式传输;
    采用字节流方式,即以字节为单位传输字节序列;
    紧急数据传送功能。
    

    在TCP/IP协议中传输层具有四个主要任务:

    组包、
    通过滑动窗口实现连接控制、
    寻址、
    通过序号确认来提供可靠性。
    

    在这里插入图片描述

    TCP协议段格式:

    在这里插入图片描述

    TCP首部结构如下:

    在这里插入图片描述
    在这里插入图片描述
    源/目的端口:认识端口号

    各占2字节。
    端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口才能实现。
    表示数据是从哪个进程来, 到哪个进程去;(端口是传输层与应用层的服务接口)
    

    序号 & 确认号:

    序号:
    占4字节。
    TCP连接中传送的数据流中的每一个字节都编上一个序号。
    序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
           
    确认号:       
    占4字节。
    是期望收到对方的下一个报文段的数据的第一个字节的序号。
    

    数据偏移:

    4位。4位TCP报头长度,即数据偏移。
    它指出 TCP报文段的 数据起始处距离TCP报文段的起始处有多远。
    “数据偏移”的单位是32位字(4字节为计算单位)。
    表示该TCP头部有多少个32bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 = 60

    保留:占6位,保留为今后使用,但目前应置为0。

    6位标志位(每个标志位只占了 1 个比特):

    紧急URG:当URG=1时,表明紧急指针字段有效。
    		它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
    			
    确认ACK:只有当ACK=1时确认号字段才有效。
    		ACK=0时,确认号无效。
    
    推送PSH:当TCP收到PSH = 1的报文段,就尽快地交付接收应用进程,
    		而不再等到整个缓存都填满了后再向上交付。
            提示接收端应用程序立刻从TCP缓冲区把数据读走。
                
    复位RST:当RST=1时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),
    		必须释放连接,然后再重新建立运输连接。
    
    同步SYN: 请求建立连接;  把携带SYN标识的称为同步报文段(在连接建立是用来同步序号)									  
             SYN=1,ACK=0,连接请求;
      		 SYN=1,ACK=1,同意建立连接
      		  
    终止FIN:用来释放一个连接。
    		 FIN=1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
    

    窗口:

    2 字节。窗口字段用来控制对方发送的数据量,单位为字节。
    TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,
    然后通知对方以确定对方的发送窗口的上限。
    	  
    表明当前允许发送方发送的数据量是以1个字节为单位的,
    在TCP当中,使用的是大小可变的窗口机制进行流量控制的(接收方对发送方的流量控制)
    

    检验和 & 紧急指针:

    检验和:占 2 字节。
    	   检验和字段检验的范围包括首部和数据这两部分,
    	   在计算检验和时,要在 TCP 报文段的前面加上12字节的伪首部。
    		
    紧急指针:占 16 位。
    		指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
    

    选项 & 填充:

    选项:长度可变。TCP最初只规定了一种选项,即 MSS(最大报文段长度Maximum Segment Size)。			  		
     	  MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” 
     	  MSS是 TCP 报文段中的数据字段的最大长度,数据字段加上TCP首部才等于整个的TCP报文段。
    
    填充:为了使整个首部长度是 4 字节的整数倍。
    	  TCP 数据部分的最大长度 MSS=TCP 报文段长度 - TCP 首部长度
    

    基于TCP应用层协议:

    HTTP
    HTTPS 
    SSH
    Telnet 
    FTP
    SMTP
    当然, 也包括自己写TCP程序时自定义的应用层协议;
    

    TCP小结

    为什么TCP这么复杂? 因为要保证可靠性,同时又尽可能的提高性能。

    • 可靠性:校验和序列号(按序到达) 确认应答 超时重发 连接管理 流量控制 拥塞控制
    • 提高性能:滑动窗口 快速重传 延迟应答 捎带应答
    • 其他:定时器(超时重传定时器, 保活定时器, TIME_WAIT定时器等)

    确认应答、超时重发、连接管理、流量控制 等等可以参考这篇博客学习:TCP协议——机制
    再推荐一篇博客,很重要:TCP三次握手 & 四次挥手

    展开全文
  • 面向连接与无连接

    万次阅读 多人点赞 2018-05-13 11:23:50
    面向连接与面向无连接是两种方法,在网络中用于相关网络协议的制定(例如TCP是面向连接的,... 面向连接协议是TCP/IP协议族的重要组成部分,面向连接依赖发送方和接收方之间的显示通信和阻塞以管理双方的数据传输,...
  • Linux网络编程——无连接和面向连接协议的区别

    万次阅读 多人点赞 2015-03-19 15:26:25
    网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个...
  • 笔记5 --TCP是面向连接的运输层协议

    千次阅读 2016-12-22 18:37:47
    TCP 是面向连接的运输层协议。这说明,在使用 TCP 协议之前,应用程序需要建立TCP连接。在传送数据结束之后,就释放TCP的连接。 TCP协议具有面向连接的、一对一的、提供可靠交付、全双工的、基于字节流的、端到端的...
  • TCP 概述 可靠的、面向连接的、基于字节流、全双工的协议目标一、TCP 是面向连接协议三次握手二、TCP 协议是可靠的校验和包的序列号超时重传流量控制、拥塞控制三、TCP 是面向字节流的协议四、TCP 是全双工的协议...
  • 为什么说ip协议是无连接协议

    千次阅读 2020-09-12 16:17:30
    为什么ip是面向无连接的协议? 面向无连接 面向无连接是通信技术之一。是指通信双方不需要事先建立一条通信线路,二是把每个带有目的地址...所谓面向连接,是指通信双方在进行通信之前,要事先在双方之间建立起一个完整
  • TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证...
  • 什么是面向连接(网络)

    千次阅读 2019-06-30 14:22:17
    面向连接: 是指通信双方在通信时,要事先建立一条通信线路。 其有三个过程:建立连接、使用连接和释放连接。 TCP协议就是一种面向连接的协议。 ...面向无连接:是指通信双方不...IP、UDP协议就是一种无连接协议。...
  • 如题,在理解TCP和UDP中,一个是面向连接的传输协议,一个是不面向连接协议。怎么能够更好的理解他们的不同。亚当和夏娃分别生活在两个山头,山头之间是万丈深渊,亚当采集野果需要分享给夏娃,如果他们之间有一条...
  • 面向连接的服务与无连接的服务

    千次阅读 2018-11-22 10:47:29
    面向连接的服务:首先每次进行数据的传输时,要先建立一个连接,然后传输,并且在传输结束后需要断开连接 特点:静态地分配资源,传输前需要建立连接,适用于在一段时间内向一个目的地址发送大量的数据 参考模型:...
  • 文章目录目录抓包分析建立 TCP 连接的三次握手数据传输断开 TCP 连接的四次挥手 抓包分析 Client IP:172.18.128.204 Server TCP Socket:(10.0.0.128, 80) 建立 TCP 连接的三次握手 建立连接时,客户端发送 (SYN...
  • - 连接:在自己监听的端口接收到连接的请求,然后经过“三次握手”,维护一定的数据结构和对方的信息,确认了该信息:我发的内容对方会接收,对方发的内容我也会接收,直到连接断开。 - 断开:经过“四次挥手”确保...
  • 连接是对状态的保持,我是这样理解的 实际上就是在客户端和服务器端都维护一个变量,这个变量维护现在数据传输的状态,例如传输了哪些数据,下一次需要传输哪些数据,等等,并不是真的我们想象中的真的有什么...
  • 面向连接的传输UDP协议

    千次阅读 2015-05-29 20:29:25
    面向连接的传输:UDP协议 上次我们简单的介绍了一下传输层以及相关协议,这次我们就来详细的研究一下UDP,研究一下该协议是怎么工作,具有哪些功能。 最开始还是关于UDP的定义,首先看来自百度百科的: UDP 是...
  • 面向连接协议 [1]

    千次阅读 2010-08-29 13:31:00
     这个文件将某个特定的Internet服务名映射到协议的端口。  例如: ssh 22/sctp # SSH  相关函数有:getservent,setservent,endservent//操作services文件  getservbyname,getserv
  • TCP面向连接的本质是什么?

    千次阅读 2019-09-03 09:29:58
    称之为“虚电路”,其实也并不是说A和B之间震荡建立了一条连接,或者说保证了路由路径是一致的,因为路由选择并不是传输层控制的,传输层负责流量控制和差错控制,因此所有的拥塞控制和路由选择其实是IP协议的工作,...
  • TCP/IP协议

    千次阅读 2019-11-08 22:55:37
    TCP/IP协议 TCP/IP: TCP/IP的全称为...TCP/IP协议从名字上面看是指TCP协议和IP协议,但是实际上不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TC...
  • HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的...
  • HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。 超文本传送协议 - HTTP 的主要特点 1.HTTP 是面向事务的客户服务器协议。 2.HTTP 1.0 协议是无状态的(stateless)。 3.HTTP ...
  • 面向连接服务、无连接服务

    万次阅读 2015-04-21 09:32:52
    1、面向连接的服务:就是通信双方在通信时,要事先建立一条通信线路,其过程有建立连接(通过三次握手的方式建立,建立... TCP协议就是一种面向连接服务的协议,电话系统是一个面向连接的模式。 2、无连接的服
  • 面向IoT的协议选择思考

    千次阅读 2018-03-19 00:00:00
    对于使用传感器和保持连接性的IoT系统而言,如何使用这些元素和多种互联网技术相结合呢? 互联网协议并不陌生, 但是IoT相关的互联网协议可能是有不同, 有些协议被用来辅助塑造系统。TCP/IP协议栈上...
  • ①ppp:点对点协议 (ppp:point to point protocol) ...在 tcp-ip 协议集中它是一种用来同步调制连接的数据链路层协议(osi 模式中的第二层),替代了原来非标准的第二层协议,即 slip。除了 ip 以外 p...
  • TCPIP-TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议 本页主题:TCPIP 访问次数:1516 相关资料:3 创建时间:2010-12-07 21:33:05 修改时间:2010-12-07 22:19:...
  • 传输控制协议(TCP)就是一种面向连接协议 ②传输服务的3个步骤 握手:在传输数据之前建立一条到期望目的地的连接。两个端点决定了传输数据的参数 数据传输:在该阶段,真实数据被有序地传输。因...
  • 上一节《套接字有哪些类型》提到,流格式套接字(Stream Sockets)就是“面向连接的套接字”,它基于 TCP 协议;数据报格式套接字(Datagram Sockets)就是“无连接的套接字”,它基于 UDP 协议。 这给大家造成一种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 219,054
精华内容 87,621
关键字:

属于面向连接的协议是