首页 > 其他分享 >tcp与udp的总结+connect阻塞+tcp三次握手、四次挥手+常见的服务器IO(发送数据+接收数据)模型

tcp与udp的总结+connect阻塞+tcp三次握手、四次挥手+常见的服务器IO(发送数据+接收数据)模型

时间:2024-08-19 19:26:29浏览次数:7  
标签:tcp connect 应用程序 IO 发送数据 服务器 接收数据 连接 客户端

一,TCP与UDP的基本总结

TCP(传输控制协议)和UDP(用户数据报协议)是两种主要的传输层协议。TCP是面向连接的,提供可靠、顺序的传输,适用于需要高可靠性的应用,如网页浏览和文件传输。它通过重传机制和流量控制确保数据完整性。UDP是无连接的,速度快但不保证数据的可靠性和顺序,适用于对实时性要求高的应用,如视频流和在线游戏。TCP在数据传输前建立连接,进行数据确认和重传,而UDP则简单直接,不进行连接建立或确认。


image


二、何种情况下connect会阻塞

TCP 三次握手过程中:在客户端调用 connect() 函数后,TCP 连接的建立需要经过三次握手过程。在这个过程中,如果服务器没有响应或者响应延迟,客户端的 connect() 函数会一直阻塞等待直到连接建立成功或者超时。

非阻塞套接字设置:如果将套接字设置为非阻塞模式,即在调用 connect() 前通过 fcntl() 函数设置了 O_NONBLOCK 标志,那么 connect() 将会立即返回,无论连接是否建立成功。在这种情况下,可以通过 select()、poll() 或 epoll() 等函数来检查连接是否建立成功,或者设置超时时间来控制连接操作。调用read的时候不堵塞(read(套接字,数组,数组大小);

目标地址不可达或网络问题:如果目标地址不可达、网络问题或者服务器端未处于监听状态,connect() 也会阻塞等待直到超时。
连接队列已满:在客户端与服务器建立连接时,服务器会维护一个连接队列来接受客户端的连接请求。如果连接队列已满,客户端的 connect() 调用将会阻塞,直到服务器接受了新的连接或连接超时。


三、TCP连接特性--- 三次握手,四次挥手

自导自演协议
三次握手:
第一次握手:客户端发送连接请求
第二次握手:服务器回应收到客户端的连接请求,并且告诉客户端可以连接
第三次握手:客户端回应服务器我收到你让我能连接的消息了
开始连接

本次发送的序列号seq是上一次的确认号ack 本次发送的ack是上一次的seq+1

四次挥手:
第一次挥手:客户端发送断开连接请求
第二次挥手:服务器回应客户端收到了断开连接的请求,准备断开
第三次挥手:服务器回应客户端准备好了,可以断开
第四次挥手:客户端回应服务器收到可以断开的请求
开始断开
image


四、常见的服务器IO(发送数据+接收数据)模型

阻塞式IO模型(Blocking IO Model):在这种模型中,当应用程序调用IO操作时,它会被阻塞,直到操作完成并返回结果。这意味着在等待IO操作完成的同时,应用程序无法执行其他任务。这种模型最适合于对实时性要求不高的应用程序。

非阻塞式IO模型(Non-Blocking IO Model):在这种模型中,应用程序IO操作和多路复用的时候会会立即返回,而不会等待IO操作完成。如果操作没有立即完成,则应用程序将继续执行其他任务。应用程序需要重复执行轮询操作来检查IO操作是否完成。这种模型适用于需要高实时性的应用程序。

IO复用模型(IO Multiplexing Model):在这种模型中,应用程序使用非阻塞IO操作向多个socket发起请求,并使用select()或poll()等系统调用来等待其中任何一个socket上的IO操作完成。当某个socket上的IO操作完成时,应用程序会收到通知并处理相应的IO事件。这种模型适用于需要同时处理多个socket连接的应用程序。

异步IO模型(Asynchronous IO Model):在这种模型中,当应用程序发起IO操作时,它会立即返回,并继续执行其他任务。当IO操作完成时,应用程序会收到通知并处理相应的IO事件。这种模型适用于需要同时处理多个IO操作的高并发应用程序。

标签:tcp,connect,应用程序,IO,发送数据,服务器,接收数据,连接,客户端
From: https://www.cnblogs.com/hhail08/p/18367946

相关文章

  • 【面试】阐述TCP和UDP的区别
    面试模拟场景面试官:你能阐述一下TCP和UDP的区别吗?###参考回答示例1.连接性TCP:面向连接(Connection-Oriented):TCP是一种面向连接的协议,在传输数据之前需要建立连接。在TCP通信过程中,客户端和服务器之间通过“三次握手”来建立连接,然后再进行数据传输,确保两者之间的......
  • 【TCP/IP】自定义应用层协议,常见端口号
    互联网中,主流的是TCP/IP五层协议5G/4G上网,是有自己的协议栈,要比TCP/IP更复杂(能够把TCP/IP的一部分内容给包含进去了)应用层可以代表我们所编写的应用程序,只要应用程序里面用到了网络通信,就可以认为这个代码就是属于应用层的代码日常开发中最常用到的一层:使用大佬......
  • 【TCP/IP】UDP协议数据格式和报文格式
    学习一个网络协议,主要就是学习“数据格式”/“报文格式”源端口/目的端口端口号是属于传输层的概念UDP报头使用两个自己的长度来表示端口号之所以端口号的范围是0~65535,是因为底层网络协议做出了强制要求如果使用一个10w这样的端口,就会在系统底层被“截断”UDP......
  • TCP/IP及五层体系结构
    TCP/IP协议族体系结构OSI与TCP/IP           目录TCP/IP协议族体系结构五层协议的体系结构应用层:运输层:网际层:数据链路层:物理层:现在互联网使用的TCP/IP体系结构已经发生了演变,即某些应用程序可以直接使用IP层,或甚至直接使用最下面的网......
  • 浅谈TCP协议、UDP协议
    一、介绍说明TCP(传输控制协议)面向连接:TCP在数据传输之前必须建立连接。这通过一个称为三次握手的过程来完成,确保连接的两端都准备好进行数据传输。可靠性:TCP提供可靠的数据传输,确保数据包正确无误地到达目的地。如果数据包在传输过程中丢失或损坏,TCP会重新发送这些数据包......
  • TCP/UDP网络聊天室
        本博客仅对网络聊天室项目进行分享,仅供学习讨论使用,欢迎大家讨论。UDP网络聊天室项目要求        利用UDP协议,实现一套聊天室软件。服务器端记录客户端的地址,客户端发送消息后,服务器群发给各个客户端软件,服务器也可以自己发送通知给所有客户端。  ......
  • C# Tcp Server端实现,使用TcpListener
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Net.Sockets;usingSystem.Net;usingF.Studio.Common.Cfg;usingSystem.Collections.Concurrent;namespaceKomaxCSTcpServer{pub......
  • SpringMVC 接收数据
    SpringMVC接收数据1.设置访问路径@RequestMapping将handler注册到HandlerMapping中@RequestMapping可以用到方法上也可以用到类上用到方法上,访问某个路径就直接执行这个方法。如果方法上都有某一个路径字段,就可以把他提取出来放到类上。需要注意的是放在类上,方法上也必......
  • 第六章 网络互连与互联网(五):TCP 和 UDP 协议
    五、TCP和UDP协议在TCP/IP协议簇中有两个传输协议,即传输控制协议(TCP)和用户数据报协议(UDP)。TCP是面向连接的,而UDP是无连接的。1、TCP服务(1)TCP协议提供面向连接的、可靠的传输服务,适用于各种可靠的或不可靠的网络。(2)TCP用户送来的是字节流形式的数据,这些数据缓存......
  • tcp介绍.3
    1.tcp的成块数据流我们看到tftp使用了停止等待协议,数据发送方在发送下一个数据块之前需要等待接收对已发送数据的确认,本章我们介绍tcp所使用的被称为滑动窗口协议的另一种形式的流量控制方法,该协议允许发送方在停止并等待确认前可以连续发送多个分组,由于发送方不必每发一个分组就......