首页 > 其他分享 >TCP和UDP

TCP和UDP

时间:2024-03-13 20:58:35浏览次数:29  
标签:UDP ACK SYN TCP 发送 服务端 客户端

计算机网络的七层协议

计算机网络体系可以大致分为一下三种,OSI七层模型、TCP/IP四层模型和五层模型。

七层协议的功能:

物理层:

负责处理网络通信的物理传输和传输介质的细节。物理层的主要任务是将比特流(bitstream)从发送方传输到接收方,确保数据能够在网络中进行可靠的物理传输。

数据链路层:

数据链路层通常简称为链路层。将网络层传下来的IP数据包组装成帧,并再相邻节点的链路上传送帧。

网络层:

主要负责实现不同网络之间的数据传输,包括路由选择、分组传输和逻辑地址寻址等功能。

运输层:

有时也译为传输层,向主机进程提供通用的数据传输服务。该层主要有以下两种协议:

  • TCP:提供面向连接的、可靠的数据传输服务;
  • UDP:提供无连接的、尽最大努力的数据传输服务,但不保证数据传输的可靠性。

会话层:

负责在网络中的两节点之间建立、维持和终止通信,如服务器验证用户登录便是由会话层完成的。

表示层:

主要负责数据格式的转换,如加密解密、转换翻译、压缩解压缩等。

应用层:

为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等。

TCP和UDP

区别

总结

TCP是一种面向连接的可靠传输协议。它提供了可靠的数据传输和错误检测机制,确保数据的完整性和顺序性。TCP使用三次握手建立连接,通过序列号、确认应答和重传机制来保证数据的可靠传输。TCP还具有拥塞控制和流量控制的功能,以适应不同网络条件和流量负载。由于TCP的可靠性和复杂性,它在需要可靠数据传输的应用中广泛使用,如文件传输、电子邮件和网页浏览等。


UDP是一种无连接的不可靠传输协议。它不提供可靠性和错误检测机制,数据传输过程中无需建立连接和维护状态。UDP直接将数据报发送到目标地址,不保证数据的顺序和完整性。UDP的优点是简单、高效,适用于一些实时性要求高、数据丢失可以容忍的应用,如音频和视频流媒体、实时游戏和DNS(域名系统)等。

TCP

三次握手:

第一次握手:

客户端向服务端发送一个SYN=1(同步报文),并进入SYN_SENT状态,等待服务器确认。

SYN标志位被设置为1,表示这是一个建立连接的请求。SYN包还包含了一些其他的信息,如源端口、目的端口和初始序列号等。 

第二次握手:

服务端收到连接请求报文后,如果同意建立连接,则向客户端发送同步确认报文(SYN=1,ACK=1),确认号为 ack = x + 1,同时选择一个随机数 seq = y 作为初始序列号,此时服务器进入SYN_RECV状态。

第三次握手:

客户端收到服务端的确认后,向服务端发送一个确认报文(ACK=1),确认号为 ack = y + 1,序列号为 seq = x + 1,客户端和服务器进入ESTABLISHED状态,完成三次握手。

为什么不是两次握手

防止已过期的连接请求报文突然又传送到服务器,因而产生错误和资源浪费。

当客户端向服务端发送一个SYN后,由于网络阻塞或者其他原因导致服务端没有接收到SYN包。客户端为了建立连接会再发送一个SYN,服务端接收到第二个SYN后,向客户端发送SYN+ACK,结果第一个SYN又发送到服务端,服务端会误认为客户端发送了第二个连接请求进入连接等待状态,造成了状态不一致问题。

数据传输

TCP为每一个连接建立一个缓冲区

  1. 发送端发送数据时会从缓冲区截取一部分发送内容,并且会附带序列号和长度。
  2. 接收端接收到数据后会回复序列号+长度,也就是下一包数据的起始序列号。
  3. 接收端可以根据序列号进行数据的重组,当出现丢包时,接收端可以重新发送请求。

数据传输不分客户端和服务端,TCP连接是全双工的,对于两端均采用上述机制。

四次挥手

第一次挥手:

客户端向服务端发送FIN关闭连接请求后进入终止等待1状态。

第二次挥手:

服务端收到FIN包后向客户端发送ACK包表示自己进入关闭等待状态,客户端进入终止等待2状态。

第三次挥手:

此时服务端可以继续发送未发送的数据,客户端也可以接收数据。数据发送完毕后服务端向客户端发送FIN包进入最后确认状态。

第四次挥手:

客户端收到FIN包后向服务端发送一个ACK包,然后进入超时等待状态,服务端收到ACK包后立即关闭连接。

为什么要进入超时等待

因为要保证客户端收到ACK包,如果客户端发送ACK包后立即关闭连接,当ACK包在网络中丢失时会导致服务端一直处在等待关闭状态。

当客户端处于超时等待状态,如果服务端没有收到ACK包会再次向客户端发送FIN包,客户端会再次发送ACK包并刷新超时等待时间。

标签:UDP,ACK,SYN,TCP,发送,服务端,客户端
From: https://blog.csdn.net/qq_62188992/article/details/136645703

相关文章

  • QT TCP通信介绍
    QT是一个跨平台的C++应用程序开发框架,它提供了一套完整的工具和库,用于开发各种类型的应用程序,包括图形用户界面(GUI)应用程序、命令行工具、网络应用程序等。QT提供了丰富的功能和类来简化网络通信的开发,其中包括TCP通信。TCP通信是一种可靠的、面向连接的通信协议,它在网络中......
  • 详解Go程序添加远程调用tcpdump功能,exec.Command("sh", "-c", "ps -elf | grep xxx |
    摘自:https://www.jb51.net/article/249001.htm这篇文章主要介绍了go程序添加远程调用tcpdump功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 最近开发的telemetry采集系统上线了。听起来高大上,简单来说就是一个grpc/udp服务端,用......
  • 在Linux中,如何理解Tcp/ip协议三次握手?
    在Linux(以及其他支持TCP/IP协议的操作系统)中,TCP(TransmissionControlProtocol,传输控制协议)为了建立一个可靠的数据传输连接,采用了三次握手(Three-wayHandshake)的过程来初始化连接。以下是TCP三次握手的详细步骤和解释:第一次握手(SYN):客户端(Client)想要与服务器(Server)建立连接时......
  • 【网络基础学习之一】OSI参考模型与TCP/IP协议
    一.分层思想1.分层背景OSI(OpenSystemsInterconnection,开放式系统互联)是国际标准化组织(ISO)在20世纪80年代制定的一种通信协议的通信模型,主要用于计算机网络中,规定了计算机系统之间通信的标准方法和协议。2.分层优点各层之间相互独立,每一层只实现一种相对独立的功能,使问题复......
  • Linux软件高级编程-网络--TCP通信--day14
    TCP包头:1.序号:发送端发送数据包的编号2.确认号:已经确认接收到的数据的编号(只有当ACK为1时,确认号才有用)TCP为什么安全可靠:1.在通信前建立三次握手连接  SYN    SYN+ACK    ACK 2.在通信过程中通过序列号和确认号保障数据传输的完整性  本次......
  • Windows下使用winsock库实现tcp客户端通信,C/C++
    编程思路第一步创建一个WASDATA结构体变量,用于存储关于Winsock库的信息;初始化Winsock库。第二步创建TCP套接字。第三步创建sockaddr_in结构体变量,用于储存服务器地址信息。里面包括设置地址族、IP地址、端口号。第四步调用connect函数连接服务器。通信调send函数发送数......
  • C#TCP通讯(二)
    客户端代码:1byte[]ReadBytes=newbyte[1024];2privatevoidConnectServer_Camera(stringip,intport)3{5tcpclient=newTcpClient();6tcpclient.BeginConnect(IPAddress.Parse(ip),port,CameraProcess,null);8}9private......
  • Logstash接收udp/tcp数据 python+ udp/tcp +logstash +elasticsearch
    Logstash接收udp/tcp数据背景:在 Logstash数据源为日志文件操作 基础上进行一、配置文件1.D:\usr\local\etc\logstash\pipeline1目录下logstash.conf文件配置input{stdin{}udp{host=>"0.0.0.0"#从5000端口获取日志port=>5000......
  • WIFI&蓝牙(ESP32)转CAN总线&串口TTL模块-C1-设备作为Modbus Slave实现RS485 Modbus RT
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ESP32_CAN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明这节测试的是让设备作为Modbus......
  • 设置MaxUserPort和TcpTimedWaitDelay
    现象:在windows服务器上安装了mysql5.7,一开始mysql运行良好,但是过了一段时间后,收到错误“错误2003(HY000):无法连接到localhost上的MySQL服务器(10055)”,当重新启动机器时,问题就解决了,但是过了一段时间后,我再次收到同样的错误消息。解决办法:设置MaxUserPortMaxUserPort是Windows操......