精华内容
下载资源
问答
  • 参考:http://zhidao.baidu.com/link?url=GSIg9_zFhWi6PHezalQveRwwUsU0as7k6MFd05r-cruLT1yDABARraHkuq8ohdIR54QtTIOHypS3Y0MTtnRcJ_ ...当客户服务器彼此交换数据前,必须先在双方之间建立一个T

    参考:http://zhidao.baidu.com/link?url=GSIg9_zFhWi6PHezalQveRwwUsU0as7k6MFd05r-cruLT1yDABARraHkuq8ohdIR54QtTIOHypS3Y0MTtnRcJ_


    1、概述

           TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 


           UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快



    2、分析


           现在Internet上流行的协议是TCP/IP协议,该协议中对低于1024的端口都有确切的定义,他们对应着Internet上一些常见的服务。这些常见的服务可以分为使用TCP端口(面向连接)和使用UDP端口(面向无连接)两种。 

           说到TCP和UDP,首先要明白“连接”和“无连接”的含义,他们的关系可以用一个形象地比喻来说明,就是打电话和写信。两个人如果要通话,首先要建立连接——即打电话时的拨号,等待响应后——即接听电话后,才能相互传递信息,最后还要断开连接——即挂电话。写信就比较简单了,填写好收信人的地址后将信投入邮筒,收信人就可以收到了。


           从这个分析可以看出,建立连接可以在需要通信的双方建立一个传递信息的通道,在发送方发送请求连接信息接收方响应后,由于是在接受方响应后才开始传递信息,而且是在一个通道中传送,因此接受方能比较完整地收到发送方发出的信息,即信息传递的可靠性比较高。但也正因为需要建立连接,使资源开销加大(在建立连接前必须等待接受方响应,传输信息过程中必须确认信息是否传到及断开连接时发出相应的信号等),独占一个通道,在断开连接前不能建立另一个连接,即两人在通话过程中第三方不能打入电话。


           而无连接是一开始就发送信息(严格说来,这是没有开始、结束的),只是一次性的传递,是先不需要接受方的响应,因而在一定程度上也无法保证信息传递的可靠性了,就像写信一样,我们只是将信寄出去,却不能保证收信人一定可以收到。 


           TCP是面向连接的,有比较高的可靠性, 一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等,而UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。对于QQ必须另外说明一下,QQ2003以前是只使用UDP协议的,其服务器使用8000端口,侦听是否有信息传来,客户端使用4000端口,向外发送信息(这也就不难理解在一般的显IP的QQ版本中显示好友的IP地址信息中端口常为4000或其后续端口的原因了),即QQ程序既接受服务又提供服务,在以后的QQ版本中也支持使用TCP协议了。


    3、TCP与UDP的选择 

           如果比较UDP包和TCP包的结构,很明显UDP包不具备TCP包复杂的可靠性与控制机制。与TCP协议相同,UDP的源端口数和目的端口数也都支持一台主机上的多个应用。一个16位的UDP包包含了一个字节长的头部和数据的长度,校验码域使其可以进行整体校验。(许多应用只支持UDP,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。) 

           很明显,当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP协议是当然的选择。当强调传输性能而不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP也是一个好的选择,如:DNS交换。把SNMP建立在UDP上的部分原因是设计者认为当发生网络阻塞时,UDP较低的开销使其有更好的机会去传送管理数据。TCP丰富的功能有时会导致不可预料的性能低下,但是我们相信在不远的将来,TCP可靠的点对点连接将会用于绝大多数的网络应用。


    整理来自:时间的诗


    展开全文
  • 自己编写的网络通信小软件,实现串口、以太网通信,支持UDP和TCP通信协议,可配置通信参数,我公司的人一直在用,非常好用哦。可代替bitboy等网络发包软件,串口通信方面解决了RS232485不兼容的问题。 注:编译时...
  • 计算机网络---UDP和TCP详解

    万次阅读 2019-01-14 10:34:36
    本文主要是分析了TCP/IP五层模型中的传输层的关键协议—UDP和TCP。在网络的学习中,也比较重要。 1.TCP TCP协议格式 TCP连接管理机制(三次握手四次挥手;;SYN泛洪攻击;TIME-WAIT时间) TCP相关机制 2.UDP UDP...

    写在前面

    本文主要是分析了TCP/IP五层模型中的传输层的关键协议—UDP和TCP。在网络的学习中,也比较重要。

    1.TCP
    TCP协议格式
    TCP连接管理机制(三次握手和四次挥手;;SYN泛洪攻击;TIME-WAIT时间)
    TCP相关机制
    
    2.UDP
    UDP协议格式
    UDP特点
    UDP注意事项
    基于UDP的应用层协议
    
    3.TCP和UDP的区分点:
    粘包问题
    TCP分段与IP分片
    面向字节流和面向数据报
    
    4.应用场景
    

    TCP学习

    1.TCP协议格式
    在这里插入图片描述
    ●源、目标端口号字段:占16比特。TCP协议通过使用"端口"来标识源端和目标端的应用进程。端口号可以使用0到65535之间的任何数字。在收到服务请求时,操作系统动态地为客户端的应用程序分配端口号。在服务器端,每种服务在"众所周知的端口"(Well-Know Port)为用户提供服务。
    ●顺序号字段:占32比特。用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。  
    ●确认号字段:占32比特。只有ACK标志为1时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节。  
    ●头部长度字段:占4比特。给出头部占32比特的数目。没有任何选项字段的TCP头部长度为20字节;最多可以有60字节的TCP头部。  
    ●标志位字段(U、A、P、R、S、F):占6比特。各比特的含义如下:  
      ◆URG:紧急指针(urgent pointer)有效。  
      ◆ACK:确认序号有效。  
      ◆PSH:接收方应该尽快将这个报文段交给应用层。  
      ◆RST:重建连接。  
      ◆SYN:发起一个连接。  
      ◆FIN:释放一个连接。  
    ●窗口大小字段:占16比特。此字段用来进行流量控制。单位为字节数,这个值是接收端期望一次接收的字节数。  
    ●TCP校验和字段:占16比特。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。  
    ●紧急指针字段:占16比特。它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。  
    ●选项字段:占32比特。可能包括"窗口扩大因子"、"时间戳"等选项。

    连接管理机制
    建立一个TCP连接需要经历三次握手,关闭连接需要经历四次挥手
    在这里插入图片描述

    服务端状态转化:
    [CLOSED -> LISTEN] 服务器端调用listen后进入LISTEN状态, 等待客户端连接;
    [LISTEN -> SYN_RCVD] 一旦监听到连接请求(同步报文段), 就将该连接放到内核等待队列中, 并向客户端发送SYN确认报文.
    [SYN_RCVD -> ESTABLISHED] 服务端一旦收到客户端的确认报文, 就进入ESTABLISHED状态,可以进行读写数据了.
    [ESTABLISHED -> CLOSE_WAIT] 当客户端主动关闭连接(调用close), 服务器会收到结束报文段,服务器返回确认报文段并进?CLOSE_WAIT;
    [CLOSE_WAIT -> LAST_ACK] 进入CLOSE_WAIT后说明服务器准备关闭连接(需要处理完之前的数据); 当服务器真正调用close关闭连接时, 会向客户端发送FIN, 此时服务器进入LAST_ACK状态,等待最后一个ACK到来(这个ACK是客户端确认收到了FIN)
    [LAST_ACK -> CLOSED] 服务器收到了对FIN的ACK, 彻底关闭连接.

    客户端状态转化:
    [CLOSED -> SYN_SENT] 客户端调用connect, 发送同步报文段;
    [SYN_SENT -> ESTABLISHED] connect调用成功, 则进入ESTABLISHED状态, 开始读写数据;
    [ESTABLISHED -> FIN_WAIT_1] 客户端主动调用close时, 向服务器发送结束报文段, 同时进入FIN_WAIT_1;
    [FIN_WAIT_1 -> FIN_WAIT_2] 客户端收到服务器对结束报文段的确认, 则进入FIN_WAIT_2, 开始等待服务器的结束报文段;
    [FIN_WAIT_2 -> TIME_WAIT] 客户端收到服务器发来的结束报文段, 进入TIME_WAIT, 并发出LAST_ACK;
    [TIME_WAIT -> CLOSED] 客户端要等待一个2MSL(Max Segment Life, 报文最大生存时间)的时间,才会进入CLOSED状态.
    ps:closed是一个假想的起始点,不是真实的状态。

    TCP为什么要经历三次握手建立连接,四次挥手断开连接呢?

    三次握手

    这是一个很有意思的问题~
    首先,我们要知道TCP是全双工的,即客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息。而半双工的意思是A可以给B发,B也可以给A发,但是A在给B发的时候,B不能给A发,即不同时,为半双工。 单工为只能A给B发,B不能给A发; 或者是只能B给A发,不能A给B发。
    我们假设A和B是通信的双方。我理解的握手实际上就是通信,发一次信息就是进行一次握手。

    第一次握手: A给B打电话说,你可以听到我说话吗?
    第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗?
    第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦!
      
      在三次握手之后,A和B都能确定这么一件事: 我说的话,你能听到; 你说的话,我也能听到。 这样,就可以开始正常通信了。

    注意: HTTP是基于TCP协议的,所以每次都是客户端发送请求,服务器应答,但是TCP还可以给其他应用层提供服务,即可能A、B在建立链接之后,谁都可能先开始通信。
    ·如果两次,那么B无法确定B的信息A是否能收到,所以如果B先说话,可能后面的A都收不到,会出现问题 。
    ·如果四次,那么就造成了浪费,因为在三次结束之后,就已经可以保证A可以给B发信息,A可以收到B的信息; B可以给A发信息,B可以收到A的信息。

    那么,在三次握手期间都干了什么事呢?
    Sequence number 顺序号码
    Acknowledge number 确认号码
    establish 建立,创建
      
    所谓三次握手(Three-Way Handshake)即建立TCP连接,是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:
    在这里插入图片描述
    (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
    (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack (number )=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
    (3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

    SYN攻击:
    在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:

    #netstat -nap | grep SYN_RECV

    四次挥手
    所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:
    在这里插入图片描述
    由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

    (1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

    (2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

    (3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

    (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

    服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

    先断开连接的主机要进入TIME-WAIT时间,为什么是2个MSL时间呢?

    MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
    1.time_wait状态如何产生?

    首先调用close()发起主动关闭的一方,在发送最后一个ACK之后会进入time_wait的状态,也就说该发送方会保持2MSL时间之后才会回到初始状态。MSL值得是数据包在网络中的最大生存时间。产生这种结果使得这个TCP连接在2MSL连接等待期间,定义这个连接的四元组(客户端IP地址和端口,服务端IP地址和端口号)不能被使用。

    2.time_wait状态产生的原因

    1)为实现TCP全双工连接的可靠释放

    由TCP状态变迁图可知,假设发起主动关闭的一方(client)最后发送的ACK在网络中丢失,由于TCP协议的重传机制,执行被动关闭的一方(server)将会重发其FIN,在该FIN到达client之前,client必须维护这条连接状态,也就说这条TCP连接所对应的资源(client方的local_ip,local_port)不能被立即释放或重新分配,直到另一方重发的FIN达到之后,client重发ACK后,经过2MSL时间周期没有再收到另一方的FIN之后,该TCP连接才能恢复初始的CLOSED状态。如果主动关闭一方不维护这样一个TIME_WAIT状态,那么当被动关闭一方重发的FIN到达时,主动关闭一方的TCP传输层会用RST包响应对方,这会被对方认为是有错误发生,然而这事实上只是正常的关闭连接过程,并非异常。

    2)为使旧的数据包在网络因过期而消失

    为说明这个问题,我们先假设TCP协议中不存在TIME_WAIT状态的限制,再假设当前有一条TCP连接:(local_ip, local_port, remote_ip,remote_port),因某些原因,我们先关闭,接着很快以相同的四元组建立一条新连接。本文前面介绍过,TCP连接由四元组唯一标识,因此,在我们假设的情况中,TCP协议栈是无法区分前后两条TCP连接的不同的,在它看来,这根本就是同一条连接,中间先释放再建立的过程对其来说是“感知”不到的。这样就可能发生这样的情况:前一条TCP连接由local peer发送的数据到达remote peer后,会被该remot peer的TCP传输层当做当前TCP连接的正常数据接收并向上传递至应用层(而事实上,在我们假设的场景下,这些旧数据到达remote peer前,旧连接已断开且一条由相同四元组构成的新TCP连接已建立,因此,这些旧数据是不应该被向上传递至应用层的),从而引起数据错乱进而导致各种无法预知的诡异现象。作为一种可靠的传输协议,TCP必须在协议层面考虑并避免这种情况的发生,这正是TIME_WAIT状态存在的第2个原因。

    3)总结
    具体而言,local peer主动调用close后,此时的TCP连接进入TIME_WAIT状态,处于该状态下的TCP连接不能立即以同样的四元组建立新连接,即发起active close的那方占用的local port在TIME_WAIT期间不能再被重新分配。由于TIME_WAIT状态持续时间为2MSL,这样保证了旧TCP连接双工链路中的旧数据包均因过期(超过MSL)而消失,此后,就可以用相同的四元组建立一条新连接而不会发生前后两次连接数据错乱的情况。

    3.time_wait状态如何避免

    首先服务器可以设置SO_REUSEADDR套接字选项来通知内核,如果端口忙,但TCP连接位于TIME_WAIT状态时可以重用端口。在一个非常有用的场景就是,如果你的服务器程序停止后想立即重启,而新的套接字依旧希望使用同一端口,此时SO_REUSEADDR选项就可以避免TIME_WAIT状态。

    TCP的相关机制
    1.确认应答机制
    在这里插入图片描述
    每一个ACK回复都带有一个确认序列号,告诉我们哪些数据已经接收到了,需要从哪里开始接收。
    2.超时重传机制
    在这里插入图片描述

    主机A发送数据给主机B后,可能会因为网络拥堵等问题,数据未能顺利到达主机B;如果A在一个特定的时间间隔没有收到来自B的ACK确认信息,就会重新发送一次数据。
    但是, 主机A未收到B发来的确认应答, 也可能是因为ACK丢失了;
    在这里插入图片描述
    因此主机B会收到很多重复数据. 那么TCP协议需要能够识别出那些包是重复的包, 并且把重复的丢弃掉. 这时候我们可以利用前面提到的序列号, 就可以很容易做到去重的效果。
    那么, 如果超时的时间如何确定?
    最理想的情况下, 找到一个最短的时间, 保证 “确认应答"一定能在这个时间内返回”.
    但是这个时间的长短, 随着网络环境的不同, 是有差异的.
    如果超时时间设的太长, 会影响整体的重传效率;
    如果超时时间设的太短, 有可能会频繁发送重复的包.
    TCP为了保证无论在任何环境下都能比较高性能的通信, 因此会动态计算这个最大超时时间
    Linux(windows也是如此)中,超时以500ms为一个单位进行控制, 每次判定超时重发的超时时间都是500ms的整数倍.如果重发一次之后, 仍然得不到应答, 等待 2500ms 后再进行重传.如果仍然得不到应答, 等待 4500ms 进行重传. 依次类推, 以指数形式递增.
    累计到一定的重传次数, TCP认为网络或者对端主机出现异常, 强制关闭连接.

    3.滑动窗口
    刚才我们讨论了确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段. 这样做有一个比较大的缺点, 就是性能较差. 尤其是数据往返的时间较长的时候.
    既然这样发送接收方式的性能较低, 那么我们一次发送多条数据, 就可以大大的提高性能(其实是将多个段的等待时间重叠在一起了)
    在这里插入图片描述
    ·窗口指的是无需等待确认应答就可以继续发送数据的最大值. 上图的窗口大小就是4000个字节(四个段).
    ·发送前四个段的时候, 不需要等待任何ACK, 直接发送;
    ·收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推;
    ·操作系统内核为了维护这个滑动窗口, 需要开辟发送缓冲区 来记录当前还有
    哪些数据没有应答; 只有确认应答过的数据, 才能从缓冲区删掉;
    ·窗口越大, 则网络的吞吐率就越高;
    在这里插入图片描述
    那么如果出现了丢包, 如何进?重传? 这?分两种情况讨论
    情况一: 数据包已经抵达, ACK被丢了
    这种情况下,部分ACK丢了不要紧,因为可以通过后边的ACK确认;
    情况二: 数据包就直接丢了.
    当某一段报文段丢失之后(例如1000-2000之间丢失了), 发送端会一直收到 1001 这样的ACK, 就像是在提醒发送端 “我想要的是
    1001” 一样;如果发送端主机连续三次收到了同样一个 “1001” 这样的应答, 就会将对应的数据 1001 - 2000 重新发送;这个时候接收端收到了 1001 之后, 再次返回的ACK就是7001了(因为2001 - 7000)接收端其实之前就已经收到了, 被放到了接收端操作系统内核的接收缓冲区中;
    这种机制被称为 "高速重发控制"也叫作“快重传”。

    流量控制
    接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应.因此TCP支持根据接收端的处理能力, 来决定发送端的发送速度. 这个机制就叫做流量控制(Flow Control);
    ·接收端将自己可以接收的缓冲区大小放到 TCP 头部中的 “窗口大小” 字段, 通过ACK端通知发送端;
    ·窗口大小字段越大, 说明网络的吞吐量越高;
    ·接收端一旦发现接收的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;
    ·发送端接受到这个窗口之后, 就会减慢自己的发送速度;
    ·如果接收端缓冲区满了, 就会将窗口置为0; 这时发送段不再发送数据, 但是 需要定期发送一个窗口探测数据段, 使接收端把窗口大小告诉发送端。

    接收端如何把窗口大小告诉发送端呢? 回忆我们的TCP头部中, 有一个16位窗口字段, 就是存放了窗口大小信息;
    那么问题来了, 16位数字最大表示65535, 那么TCP窗口最大就是65535字节么?
    实际上, TCP?部40字节选项中还包含了一个窗口扩大因子M, 实际窗口大小是窗口字段的值左移 M 位;

    拥塞控制
    虽然TCP有了滑动窗口这个大杀器, 能够有效可靠的发送大量的数据. 但是如果在刚开始阶段就发送大量的数据, 仍然可能引发问题.
    因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵. 在不清楚当前网络状态下, 贸然发送大量的数据, 是很有可能引起雪上加霜的。
    TCP引入 慢启动 机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多?大的速度传输数据。
    此处引入一个概念程为拥塞窗口发送开始的时候, 定义拥塞窗口大小为1;
    每次收到1个ACK应答, 拥塞窗口翻一倍;每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗口
    像上面这样的拥塞窗口增长速度, 是指数级别的. “慢启动” 只是指初使时慢, 但是增长速度常快

    为了不增长的那么快,因此不能让拥塞窗口单纯的加倍。所以,又引入了“用塞窗口的阈值”的概念。当拥塞窗口的大小超过这个阈值的时候,就从指数增长变为线性增长。
    在这里插入图片描述

    当TCP开始启动的时候, 慢启动阈值等于窗口的最大值;
    在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1.
    少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞;
    当TCP通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降;
    拥塞控制, 归根结底是TCP协议想尽可能快的把数据传输给对方, 但是还要避免给网络造成太大压力的折中方案。

    延迟应答
    如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小.
    假设接收端一次性最大能接收1M数据,结果来了500K数据,如果立刻应答,那么返回的窗口就只有500K.在这种情况下接收端接收远远没有到达自己的承受能力,所以可以将窗口放大一些在回复;比如等待200ms再回复,这时候接收的窗口大小就是1M了。
    一定要记得, 窗口越大, 网络吞吐量就越大, 传输效率就越高. 我们的目标是在保证网络不拥塞的情况下尽量提高传输效率.
    那么,所有的包都可以延迟应答吗?当然不是
    ·数量限制: 每隔N个包就应答一次;
    ·时间限制: 超过最长延迟时间就应答一次;
    具体的数量和超时时间, 依操作系统不同也有差异; 一般N取2, 超时时间取200ms;

    捎带应答
    在延迟应答的基础上, 我们发现, 很多情况下, 客户端服务器在应用层也是 “一发一收” 的. 意味着客户端给服务器说了 “How are you”, 服务器也会给客户端回一个 “Fine, thank you”;那么这个时候ACK就可以搭顺风车, 和服务器回应的 “Fine, thank you” 一起回给客户端。

    TCP异常情况
    进程终止: 进程终止会释放文件描述符, 仍然可以发送FIN. 和正常关闭没有什么区别.
    机器重启: 和进程终止的情况相同.
    机器掉电/网线断开: 接收端认为连接还在, 一旦接收端有写?操作, 接收端发现连接已经不在了, 就会进行reset. 即使没有写入操作, TCP自己也内置了一个保活定时器, 会定期询问对方是否还在. 如果对方不在, 也会把连接释放.
    另外, 应用层的某些协议, 也有一些这样的检测机制. 例如HTTP长连接中, 也会定期检测对方的状态. 例如QQ,在QQ断线之后, 也会定期尝试重新连接。

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

    可靠性:
    校验和,序列号,应答机制,超时重传,连接管理,拥塞控制,流量控制

    提高性能:
    滑动窗口,快速重传,延迟应答,捎带应答

    UDP学习

    1.UDP协议格式
    在这里插入图片描述
    ●源、目标端口号字段:占16比特。作用与TCP数据段中的端口号字段相同,用来标识源端和目标端的应用进程。  
    ●长度字段:占16比特。标明UDP头部和UDP数据的总长度字节。  
    ●校验和字段:占16比特。用来对UDP头部和UDP数据进行校验。和TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的。

    UDP的特点:
    1.无连接:知道对端的IP和端口号就可以直接进行传输,不需要建立连接。
    2.不可靠:没有确认机制,没有重传机制;如果因为网络障碍等问题使消息发送失败,也不会给应用层返回错误消息。
    3.面向数据报:不能够灵活的控制读写数据的次数和数量。

    UDP注意事项:
    我们注意到, UDP协议头部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP头部). 然而64K在当今的互联网环境下, 是一个非常小的数字.如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;

    基于UDP的应用层协议
    ·NFS: 网络文件系统
    ·TFTP: 简单文件传输协议
    ·DHCP: 动态主机配置协议
    ·BOOTP: 启动协议(用于硬盘设备启动)
    ·DNS: 域名解析协议

    TCP和UDP的区分点学习

    1.粘包问题
    首先要明确, 粘包问题中的 “包” , 是指的应用层的数据包.
    在TCP的协议头中, 没有如同UDP那样的 “报文长度” 这样的字段, 但是有一个序号这样的字段.站在传输层的角度, TCP是一个一个报文过来的. 按照序号排好序放在缓冲区中.站在应用层的角度, 看到的只是一串连续的字节数据.
    那么应用程序看到了这么一连串的字节数据, 就不知道从哪个部分开始到哪个部分, 是一个完整的应用层数据包。

    怎么避免粘包问题
    1.对于定长的数据包,每一次接收固定长度就可以了;
    2.对于变长数据包,可以在头部加上数据长度字段说明,指定长度读取;
    3.对于变长数据包,还可以在包和包之间使用明确的分隔符(应用层协议,程序猿自己定,只要保证分隔符不与正文发生冲突)。

    对于UDP协议来说, 是否也存在 “粘包问题” 呢?
    对于UDP, 如果还没有上层交付数据, UDP的报文长度仍然在. 同时, UDP是一个一个把数据交付给应用层. 就有很明确的数据边界.
    站在应用层的角度, 使用UDP的时候, 要么收到完整的UDP报文, 要么不收. 不会出现"半个"的情况.

    2.“TCP分段”与“IP分片”
    TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组。

    我们先来看两个与TCP报文段分段和IP数据报分片密切相关的概念。

    MYU(最大传输单元)
    
    MTU前面已经说过了,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节。一个IP数据报在以太网中 传输,如果它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于MTU。分片传输的IP数据报不一定按序到达,但IP首部中的信息能让这些数据报片按序组装。IP数据报的分片与重组是在网络层进完成的。
    
    
    MSS(最大分段大小)
    
    MSS是TCP里的一个概念(首部的选项字段中)。MSS是TCP数据包每次能够传输的最大数据分段,TCP报文段的长度大于MSS时,要进行分段传输。TCP协议在建立连接的时候通常要协商双方的MSS值,每一方都有用于通告它期望接收的MSS选项(MSS选项只出现在SYN报文段中,即TCP三次握手的前两次)。MSS的值一般为MTU值减去两个首部大小(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以如果用链路层以太网,MSS的值往往为1460。而Internet上标准的MTU(最小的MTU,链路层网络为x2.5时)为576,那么如果不设置,则MSS的默认值就为536个字节。很多时候,MSS的值最好取512的倍数。TCP报文段的分段与重组是在运输层完成的。
    

    到了这里有一个问题自然就明了了,TCP分段的原因是MSS,IP分片的原因是MTU,由于一直有MSS<=MTU,很明显,分段后的每一段TCP报文段再加上IP首部后的长度不可能超过MTU,因此也就不需要在网络层进行IP分片了。因此TCP报文段很少会发生IP分片的情况。

    再来看UDP数据报,由于UDP数据报不会自己进行分段,因此当长度超过了MTU时,会在网络层进行IP分片。同样,ICMP(在网络层中)同样会出现IP分片情况。

    总结:UDP不会分段,就由IP来分。TCP会分段,当然就不用IP来分了!
    另外,IP数据报分片后,只有第一片带有UDP首部或ICMP首部,其余的分片只有IP头部,到了端点后根据IP头部中的信息再网络层进行重组。而TCP报文段的每个分段中都有TCP首部,到了端点后根据TCP首部的信息在传输层进行重组。IP数据报分片后,只有到达目的地后才进行重组,而不是向其他网络协议,在下一站就要进行重组。

    最后一点,对IP分片的数据报来说,即使只丢失一片数据也要重新传整个数据报(既然有重传,说明运输层使用的是具有重传功能的协议,如TCP协议)。这是因为IP层本身没有超时重传机制------由更高层(比如TCP)来负责超时和重传。当来自TCP报文段的某一段(在IP数据报的某一片中)丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应于一份IP数据报(可能有多个IP分片),没有办法只重传数据报中的一个数据分片。
    

    3.“面向字节流”和“面向数据报”

    面向字节流
    创建一个TCP的socket,在内核创建了一个发送缓冲区和接收缓冲区。
    ·调用write()时, 数据会先写入发送缓冲区中;
    ·如果发送的字节数太长, 会被拆分成多个TCP的数据包发出;
    ·如果发送的字节数太短, 就会先在缓冲区等待, 等到缓冲区长度差不多了, 或者其他合适的时机发送出去;
    ·接收数据的时候, 数据也是从显卡驱动程序到达内核的接收缓冲区;
    然后应用程序可以调用read()从接收缓冲区拿数据;
    ·另一方面, TCP的一个连接, 既有发送缓冲区, 也里有接收缓冲区, 那么对于这一个连接, 既可以读数据,也可以写数据. 这个概念叫做 全双工

    面向数据报
    应用层交给UDP的数据报,既不会拆分,也不会合并。
    UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;
    UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃。

    如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节;
    而不能循环调用10次recvfrom, 每次接收10个字节;

    4.应用场景
    TCP应用场景:效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。举几个例子:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。

    UDP应用场景:效率要求相对高,对准确性要求相对低的场景。举几个例子:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)。

    展开全文
  • UDPTCP区别

    千次阅读 2014-05-30 09:29:47
    TCP和UDP都属于第四层(传输层)的协议TCP是有连接协议,UDP是无连接协议。TCP提供可靠的传输。UDP不提供。形象地讲TCP是我发给你东西,你收没收到你要给我个回话,等一段时间如果你不回话我就重发。而UDP是我不管你...

    解释1

    都是网络层的重要协议。TCPUDP都属于第四层(传输层)的协议

    TCP是有连接协议,UDP是无连接协议。TCP提供可靠的传输。UDP不提供。

    形象地讲TCP是我发给你东西,你收没收到你要给我个回话,等一段时间如果你不回话我就重发。

    UDP是我不管你收没收到,我只管发,产生错误了由上一层处理,所以UDPTCP快。

    解释2

    1. 面向连接的TCP
         面向连接就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。
         TCPTransmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次对话才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:我想给你发数据,可以吗?,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:可以,你什么时候发?,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:我现在就发,你接着吧!,这是第三次对话。三次对话的目的是使数据包的发送和接收同步,经过三次对话之后,主机A才向主机B正式发送数据。
         TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。

    2. 面向非连接的UDP协议
         面向非连接就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。
         UDPUser Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
         UDP 适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实 “ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。正因为 UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。
         TCP协议和UDP协议各有所长、各有所短,适用于不同要求的通信环境。


    3. TCP协议和UDP协议的差别

     

    tcp

    udp

    是否连接

    面向连接

    面向非连接

    传输可靠性

    可靠的

    不可靠的

    应用场合

    传输大量的数据

    少量数据

    速度

     

    4. 按端口号可分为3大类:
        (1)公认端口(Well Known Ports):从01023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。
        (2)注册端口(Registered Ports):从102449151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。
        (3)动态和/或私有端口(Dynamic and/or Private Ports):从4915265535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUNRPC端口从32768开始。
        (4通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用一种通常的闭合端口连接它时将产生不同的结果。一种典型的扫描:使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。


    解释3

    TCPUDP的选择 
    如果比较UDP包和TCP包的结构,很明显UDP包不具备TCP包复杂的可靠性与控制机制。与TCP协议相同,UDP的源端口数和目的端口数也都支持一台主机上的多个应用。一个16位的UDP包包含了一个字节长的头部和数据的长度,校验码域 使其可以进行整体校验。(许多应用只支持UDP,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。) 
    很明显,当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP协议是当然的选择。当强调传输性能而不是传输的完整性时,如:音频和多媒 体应用,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP也是一个好的选择,如:DNS交换。把SNMP 建立在UDP上的部分原因是设计者认为当发生网络阻塞时,UDP较低的开销使其有更好的机会去传送管理数据。TCP丰富的功能有时会导致不可预料的性能低 下,但是我们相信在不远的将来,TCP可靠的点对点连接将会用于绝大多数的网络应用。

    展开全文
  • 以太网TCPUDP协议的区别

    千次阅读 2019-12-26 11:14:45
    这些常见的服务可以分为使用TCP端口面向连接)使用UDP端口(面向无连接)两种。 一、TCP协议简介 TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须对方建立...

    在Internet上流行的协议是TCP/IP协议,该协议中对低于1024的端口都有确切的定义,他们对应着Internet上一些常见的

    服务。这些常见的服务可以分为使用TCP端口面向连接)和使用UDP端口(面向无连接)两种。

    一、TCP协议简介

    TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。

    一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。  

    TCP的三次握手过程如下:

    1. 主机A通过向主机B发送一个含有同步序列号的标志位的数据段给主机B ,向主机B请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。

    2. 主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我。

    3. 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:“我已收到回复,我现在要开始传输实际数据了。这样3次握手就完成了,主机A和主机B就可以传输数据了。

    TCP建立连接要进行3次握手,而断开连接要进行4次。

    1. 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求;

    2.主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1;

    3. 由B端再提出反方向的关闭请求,将FIN置1;

    4. 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束。

    由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础。

    二、UDP协议简介

    UDP(User Data Protocol)——用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

    UDP协议具有如下几个特点:

    (1)UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

    (2)由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。

    (3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。

    (4)吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。

    (5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。

    (6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。

    我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

    三、TCP与UDP区别总结

    1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接;

    2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,也不保证可靠交付;

    3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的;

    4. UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);

    5. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;

    6. TCP首部开销20字节;UDP的首部开销小,只有8个字节;

    7. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

    四、应用场合

    UDP适用于不需要TCP可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候,UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。比如,日常生活中,常见使用UDP协议的应用如下: QQ语音、QQ视频、TFTP ……。

    TCP是一种面向连接的、可靠的、基于字节流的运输层通信协议,通常由IETF的RFC793说明。在简化的计算机网络OSI模型中,它完成运输层所指定的功能。一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等。

    展开全文
  • UDP和TCP(1)

    2016-07-31 14:13:31
    Vamei大神的比喻很好,说UDP是IP协议在传输层的傀儡,之所以存在的必要时IP协议不包括端口号,而UDP和TCP都是包括端口号。  端口号是应用程序的资源,不同的应用程序可以占用不同的端口号。程序运行时,操作系统...
  • 以太网 IP TCP UDP数据包分析
  • #UDP和TCP最大数据传输长度 UDP可发送的数据最大长度为IP包的最大长度减去IP头部和UDP头部的长度, 不过,这个长度为MTU,MSS不是一个层面上的概念。MTUMSS是基于以太网和通信线路上网络包的最大长度来计算的,而...
  • 计算机网络漫谈之UDP和TCP

    千次阅读 2017-05-23 00:08:56
    前面IP协议的实现套路一样,我们需要一个空间来存放端口号,因此就有了传输层的协议TCP和UDP。最简单的实现就是UDP协议,它的格式几乎就是在数据前面,加上端口号。UDP数据包,也是由”标头””数据”两部分组成...
  • 以太网ENC28J60 tcp udp

    2012-05-03 21:59:22
    以太网ENC28J60 tcp udp
  • 以太网 IP TCP UDP 头部

    千次阅读 2017-11-03 15:37:39
    以太网头部结构 1、目的地址/源地址:目的主机或源主机的MAC地址 2、类型: 0800:IP数据报 0806:ARP请求 3、数据: 不足46字节的数据会被补足到46字节再发送。 4、内核数据结构 #define ETH_ALEN 6 struct ...
  • 本文是基于FPGA高性价比、可灵活配置的特点,也是当前流行的“微...本文通过在FPGA中硬件实现嵌入式TCP/IP协议(包括UDP、IP、ARP、TCP 等网络协议)以及以太网MAC协议,并提供标准MII接口,通过外接PHY实现 网络连接。
  • 网络调试助手,支持UDPTCP,在电脑以太网设置静态IP,点“高级”按钮在里面添加IP子网掩码,打开网络调试助手,查看数据
  • IP/UDP/TCP/ICMP数据报协议的校验区别和计算 1、现针对各种协议数据包校验的区别总结如下: (1)IP校验: IP数据报的校验只检验IP数据报的首部。 (2)UDP校验UDP数据报计算校验的方法IP数据报...
  • 以太网基础知识:TCPUDP区别

    千次阅读 2011-09-09 10:14:42
    这里先简单的说一下TCPUDP区别: 1。基于连接与无连接 2。对系统资源的要求(TCP较多,UDP少) 3。UDP程序结构较简单 4。流模式与数据报模式 5。TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP...
  • UDP和TCP协议包大小的计算UDP一次发送数据包的大小,TCP一次发送数据包的大小。 MTU最大传输单元,这个最大传输单元实际上链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网...
  • 以太网UDP最大报文长度

    千次阅读 2014-08-19 17:51:50
    对于以太网环境下UDP传输中的数据包长度问题  首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。  其中以太网(Ethernet)的数据帧在链路层  IP包在网络层  TCPUDP包在传输层 ...
  • UDP没有拥塞控制,应用层能够更好的控制要发送的数据发送时间 UDP提供尽最大努力的交付,不保证可靠交付。 无连接,不提供流量控制、丢失重传等机制 对上层数据不做任何改动 仅添加UDP首部,然后传至IP层 ...
  • 以太网,IP,TCPUDP

    千次阅读 2017-08-22 19:46:41
    以太网,IP,TCP,UDP数据包分析 - feitian629 - 博客园 飞天 技术引领潮流 博客园 首页 新随笔 联系 管理 订阅 随笔- 34  文章- 0  评论- 12
  • TCPUDPTCP/IP的区别

    2020-06-19 09:54:43
    从网络分层来看,TCPUDP是在传输层,IP是在网络层。 TCP TCP是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外,TCP还能够...
  • 以太网,IP,TCP,UDP数据包分析

    千次阅读 2013-11-25 22:01:52
    以太网,IP,TCP,UDP数据包分析 1、ISO开放系统有以下几层: 7 应用层 6 表示层 5 会话层 4 传输层 3 网络...
  • 以太网帧、IP 帧、UDP/TCP帧、http 报文结构解析

    万次阅读 多人点赞 2018-11-16 23:18:26
    OSI 是不同制造商的设备应用软件在网络中进行通信的标准,此模型已经成为计算机间网络间进行通信的主要结构模型, 目前使用的大多数网络通信协议的结构都是基于 OSI 模型的。OSI 包括体系结构、服务定义协议...
  • 以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解 以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解
  • 一、UDP UDP允许传输的最大长度理论上2^16 - udp head - iphead(65507 字节 = 65535 - 20 - 8) 但是实际上UDP数据报的数据区最大长度为1472字节...UDP属于运输层,下面我们由下至上一步一步来看: 以太网(Ether...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,987
精华内容 18,794
关键字:

以太网udp和tcp的区别