首页 > 其他分享 >TCP | UDP

TCP | UDP

时间:2023-07-26 17:12:36浏览次数:55  
标签:UDP 报文 TCP 发送 服务器 连接 客户端

0_131271823564Rx.gif

TCP三次握手

  1. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
  2. 第二次握手:服务器收到syn包并确认客户的SYN(ack=j+1),同时也发送一个自己的SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。

TCP 四次挥手

  1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
  2. 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
  3. 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最 后的数据)。
  4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
  6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

TCP/IP / 如何保证数据包传输的有序可靠?

对字节流分段并进行编号然后通过 ACK 回复和超时重发这两个机制来保证。
为了保证数据包的可靠传递,发送方必须把已发送的数据包保留在缓冲区并为每个已发送的数据包启动一个超时定时器,如在定时器超时之前收到了对方发来的应答信息(可能是对本包的应答,也可以是对本包后续包的应答),则释放该数据包占用的缓冲区,否则,重传该数据包,直到收到应答或重传次数超过规定的最大次数为止。接收方收到数据包后,先进行CRC校验,如果正确则把数据交给上层协议,然后给发送方发送一个累计应答包,表明该数据已收到,如果接收方正好也有数据要发给发送方,应答包也可方在数据包中捎带过去。

TCP和UDP的区别

  1. TCP是面向链接的,而UDP是面向无连接的。
  2. TCP仅支持单播传输,UDP 提供了单播,多播,广播的功能。
  3. TCP的三次握手保证了连接的可靠性; UDP是无连接的、不可靠的一种数据传输协议,首先不可靠性体现在无连接上,通信都不需要建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收。
  4. UDP的头部开销比TCP的更小,数据传输速率更高,实时性更好。

参考文章

连八股文都不懂还指望在前端混下去么

标签:UDP,报文,TCP,发送,服务器,连接,客户端
From: https://www.cnblogs.com/wz0130/p/17582979.html

相关文章

  • linux服务器性能调优(udp为主)
    udp的好处很明显,效率高,减少了建立连接的流程,减少了报文头的占比,也减少了维护连接的开销。缺点就是不稳定,会丢包。还有就是由于udp的高效,导致用于udp的一些应用开发,并发都比较大,更容易丢包。io复用SO_REUSEADDRSO_REUSEPORT创建listener用来监听数据时,有时候需要配置io复用。也......
  • PROFINET转TCP/IP网关profinet电缆
    大家好,今天要和大家分享一款自主研发的通讯网关,捷米JM-PN-TCPIP。这款网关可是集多种功能于一身,PROFINET从站功能,让它在通讯领域独领风骚。想知道这款网关如何实现PROFINET和TCP/IP网络的连接吗?一起来看看吧!首先,这款网关可以连接到PROFINET总线中作为从站使用,同时还能连接到TCP/I......
  • 协议 tcp rpc http websocket
    传输层:tcp,udp应用层:http,grpc,websocket浏览器服务器太多了,互相沟通需要统一的协议,http主要用于B/S如果是公司内部,轻量小巧定制化,用rpchttp是半双工,同一时间,只能一方发送消息,客户发送请求,建立http连接后,通过header可以申请升级到websocket协议 待补充wireshark的抓包分析:......
  • 详解TCP网络协议栈的工作原理
    本文分享自华为云社区《网络通信的神奇之旅:解密LinuxTCP网络协议栈的工作原理》,作者:LionLong。一、TCP网络开发APITCP,全称传输控制协议(TransmissionControlProtocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。1.1、TCP服务器调用的API#include<sys/types......
  • matlab用udp发数据,python接受数据
    用UDP在Matlab中发送数据,Python中接收数据在科学研究和工程领域中,数据的传输和通信是非常重要的。在实际应用中,我们经常需要在不同的编程语言之间传输数据。本文将介绍如何在Matlab中使用UDP协议发送数据,并在Python中接收这些数据。UDP协议简介用户数据报协议(UDP)是一种无连接的......
  • EtherCAT转TCP/IP网关EtherCAT和TCP/IP
    你是否曾经为生产管理系统的数据互联互通问题烦恼过?曾经因为协议不同导致通讯问题而感到困惑?现在,我们迎来了突破性的进展!介绍捷米特JM-TCPIP-ECT,一款自主研发的Ethercat从站功能的通讯网关。它能够连接到Ethercat总线中做为从站使用,同时也可以连接到TCP/IP网络中做为服务器或客户......
  • 到主机 的 TCP/IP 连接失败 java.net.ConnectException: Connection timed out
    org.apache.commons.dbcp.SQLNestedException:CannotcreatePoolableConnectionFactory(到主机的TCP/IP连接失败。java.net.ConnectException:Connectiontimedout:connect) 1、网络配置tcp/IP没有打开2、防火墙3、连接地址写错(工程文件中数据库连接写正确了,不代表编......
  • TCP/IP协议模型的五层处理流程简介
    TCP/IP是一种分层模型,它将通信协议分解为五个层次,每个层次都有特定的功能和任务。以下是TCP/IP五层的处理流程:应用层(ApplicationLayer):这是TCP/IP模型的最上层,负责处理应用程序的请求和数据。在该层,应用程序(例如浏览器、电子邮件客户端等)与用户进行交互,并将数据传递给下一层。......
  • TCP灌包中RTT时延与RTO超时关系
    TCP的RTT算法从前面的TCP重传机制我们知道Timeout的设置对于重传非常重要。设长了,重发就慢,丢了老半天才重发,没有效率,性能差;设短了,会导致可能并没有丢就重发。于是重发的就快,会增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。而且,这个超时时间在不同的网络的情况下,根......
  • Untiy 网络编程-深入了解TCP
    1.从TCP到物理层应用层:应用层是给应用程序提供功能的。在发送{hello}的例子里面,计算机会把hello转化为二进制然后发送到传输层。传输层:在收到二进制数据后,传输层协议会对它进行一系列的加工,并提供数据流传送、可靠性校验,流量控制。又由于网络层的IP包......