首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

协议栈-断开连接,删除套接

生成断开连接请求包 先假设是客户端发起的断开连接请求 客户端 客户端调用socket程序库的close程序,该程序会委托协议栈生成一个包含断开连接信息的tcp头部(fin比特为1),委托ip模块将数据发送给服务端...,客户端接下来就会调用close,生成fin比特为1的包,委托ip模块发送,服务器收到后确认发送ack包就结束了 删除套接 断开连接操作后,套接中的控制信息就会被清除,也就不需要这个套接了,但是,...套接删除是要等待一段时间的,不能立马删除。...当碰到下面这个操作时就会造成问题: 假设服务器先发起的断开连接操作: 假设客户端发送的fin包丢失了,此时服务器的套接信息已经删除了,并且正好服务器的另外一个程序要使用套接(复用的正好是之前的那个套接...因此会等待一段时间才会删除套接,这个时间是并不是固定的,协议栈并没有规定,一般是等待几分钟。

1.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    套接

    套接最早是UC Berkeley为BSD操作系统设计的。现在POSIX标准化了套接。在Linux和Unix下的套接是一致的。...套接是通信端点的一种抽象。在Linux下socket是文件的一种。也就是说可以使用read和write函数去处理套接。...POSIX标准支持的套接类型如下表所示: 类型 功能 SOCK_DGRAM 长度固定,无连接,不可靠的报文传递。默认协议UDP SOCK_STREAM 有序,可靠,面向连接,全双工的字节流。...socket的第二个参数就是表1给出的套接类型,但是在实现的时候,可以自有增加其他类型的支持。 protocol通常是0,表示给给定的域和套接类型选择默认的协议。...这在同一域和套接类型的时候是有用的,可以指定选择某一个特定的协议。 socket函数返回一个套接描述符,本质上是一个文件描述符。

    1.2K00

    套接 socket 和 tcp 连接过程

    需要明确的是,每个 tcp 连接的两端都会关联一个套接和该套接指向的文件描述符。 二、tcp 连接过程 ?...监听之后,套接就从 CLOSE 状态转变为 LISTEN 状态,于是这个套接就可以对外提供 TCP 连接的窗口了。...既然 connect() 函数是向某个套接发起连接的,自然在使用 connect() 函数时需要带上连接的目的地,即目标地址和目标端口,这正是服务端的监听套接上绑定的地址和端口。...),并对此项生成一个用于后续连接套接描述符(姑且用 connfd 来表示),有了新的连接套接,用户进程/线程(称其为工作者)就可以通过这个连接套接和客户端进行数据传输,而前文所说的监听套接(sockfd...经过 accept() 函数后,tcp 连接套接从 sockfd 变成了 connfd ,也就是说,经过 accept() 之后,这个连接和 sockfd 套接已经没有任何关系了。 ?

    2.4K10

    Socket(套接

    根据连接启动的方式以及本地套接连接的目标,套接之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。...(1)服务器监听:是服务器端套接并不定位具体的客户端套接,而是处于等待连接的状态,实时监控网络状态。...(2)客户端请求:客户端的套接必须首先描述它要连接的服务器的套接,指出服务器端套接的地址和端口号,然后就向服务器端套接提出连接请求。...(3)连接确认:是指当服务器端套接监听到或者说接收到客户端套接连接请求,它就响应客户端套接的请求,建立一个新的线程,把服务器端套接的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。...而服务器端套接继续处于监听状态,继续接收其他客户端套接连接请求。 服务器socket与客户端socket建立连接的部分其实就是“三次握手”。

    1.2K10

    Python套接

    客户端所需要做的只是创建它的单一通信端点,然后建立一个到服务器的连接套接:通信的端点 套接 有两种类型的套接:基于文件的和面向网络的。 IPC:进程间通信。...面向连接套接与无连接套接 面向连接套接 面向连接套接:在进行通信之前必须先建立一个连接。这种类型的通信也称为虚拟电路或流套接。 实现这种连接类型的主要协议是传输控制协议(TCP)。...无连接套接 与虚拟电路形成鲜明对比的是数据报类型的套接,它是一种无连接套接。实现这种连接类型的主要协议是用户数据报协议(UDP)。...Python中的网络编程 Socket详细介绍 TCP服务器端工作流程 创建服务器端套接A 将套接A与地址B使用bind函数绑定 使用listen函数使服务器开始监听 使用accept函数返回新的套接对象...C及其地址 使用C的recv函数接受发送到服务器端的数据 使用C的send函数发送数据 每次接收到一个新的连接就会在服务器端创建一个新的套接来负责与该连接进行信息的交换 TCP客户端工作流程 创建套接

    1.6K20

    套接Socket编程

    在内核中,为每个Socket维护两个队列: 已经建立了连接的队列,这时候连接三次握手已经完毕,处于established状态 还没有完全建立连接的队列,这时三次握手还没完成,处于syn_rcvd状态。...在服务端等待时,客户端可通过connect函数发起连接: 先在参数中指明要连接的IP地址和端口号 然后开始发起三次握手 内核会给客户端分配一个临时端口。...UDP没有维护连接状态,因而无需每对连接都建立一组Socket,只要有一个Socket就能和多个客户端通信。...即最大连接数,系统会用一个四元组来标识一个TCP连接。 {本机IP, 本机端口, 对端IP, 对端端口} 服务器通常固定在某个本地端口上监听,等待客户端的连接请求。...一旦建立了一个连接,就会有一个已连接Socket,这时你可以创建一个子进程,然后将基于已连接Socket的交互交给这个新的子进程来做。

    1.3K10

    Socket 套接协议

    HTTP协议:简单对象访问协议,对应于应用层 ,同时HTTP协议也是基于TCP连接的;主要解决如何包装数据。...socket/套接起源于20世纪70年代,是加利福利亚大学的伯克利版本UNIX(称为BSD UNIX)的一部分。目的是实现主机上运行的一个程序与另一个运行的程序进行通信。...又名套接,是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。...为了建立通信通道,网络通信的每个端点拥有一个套接对象极为重要。 三种最流行的套接类型是:stream,datagram和raw。...stream和datagram套接可以直接与TCP协议进行接口,raw套接则接口到IP协议。Python 提供了两个基本的 socket 模块。

    1.5K20

    IPC|网络套接

    为了访问由UDP提供的服务,你需要像以前一样使用套接和close系统调用,但你需要用两个 数据报专用的系统调用sendto 和 recvfrom来代替原来使用在套接上的read和write调用 套接网络...套接是通信端点的抽象,与应用程序要使用文件描述符访问文件一样,访问套接也需要套接描述符。...,进一步确定通信特征 SOCK_DGRAM 长度固定的,无连接的不可靠报文传递 SOCK_RAW IP协议的数据接口 SOCK_SEQPACKET 长度固定/有序/可靠的面向连接报文传递 SOCK_STREAM...有序/可靠/双向的面向连接字节流 参数protocol,通常是0,表示按给定的域和套接类型选择默认协议 当对同一域和套接类型支持多个协议时,可以使用protocol 参数选择一个 特定协议。...在AF_INET 通信域中套接类型SOCK_STREAAM 的默认协议时TCP(传输控制协议) 在AF_INET 通信域中套接类型SOCK_DGRAM的默认协议时UDP(用户数据报协议) SOCK_RAW

    1.1K30

    套接随笔1

    服务器端,socket()返回的套接用于监听(listen)和接受(accept)客户端的连接请求。这个套接不能用于与客户端之间发送和接收数据。...accept()接受一个客户端的连接请求,并返回一个新的套接。所谓“新的”就是说这个套接与socket()返回的用于监听和接受客户端的连接请求的套接不是同一个套接。...这个新的套接用于与这次接受的客户端之间的通信。假设一共有3个客户端连接服务器端。...如果已经有客户端连接服务器端,不再需要监听和接受更多的客户端连接的时候,可以关闭由socket()返回的套接,而不会影响与客户端之间的通信。...当某个客户端断开连接、或者是与某个客户端的通信完成之后,服务器端需要关闭用于与该客户端通信的套接

    54920

    Socket - 套接编程

    目录 Socket - 套接编程 Socket 通信流程图 Socket模块 socket()方法 部分参数 bind()方法 listen()方法 accept()方法 accept()函数返回值:...connect() 方法 close()方法 服务端客户端对比 简单案例 简易通信循环 优化通信循环 黏包问题 Struct 模块 规定报头 解决黏包问题 上传文件案例 UDP通信 Socket - 套接编程...,分为客户端和服务端,必须先启动服务端,然后再启动客户端去链接服务端; Socket模块 socket()方法 客户端和服务端的入口,默认就是基于网络的TCP协议传输; 部分参数 套接家族...proto参数是协议标志,默认为0,原始套接需要指定值 部分源码 bind()方法 绑定函数的作用就是为调用socket()函数产生的套接分配一个本地协议地址,建立地址与套接的对于关系...服务端 server.close()# 关闭套接 client.close()# 关闭套接 服务端和客户端 注意:服务端和客户端不可同时发数据(send),也不可同时收数据(recv) 简单案例

    1K10

    Python与套接

    在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时 客户端与服务器端连接就建立了。...() 被动接受TCP客户的连接,(阻塞式)等待连接的到来 客户端套接函数 s.connect() s.connect_ex() s.connect_ex() connect()函数的扩展版本,出错时返回出错码...s.getsockname() 当前套接的地址 s.getsockopt() 返回指定套接的参数 s.setsockopt() 设置指定套接的参数 s.close() 关闭套接 面向锁的套接方法...s.setblocking() 设置套接的阻塞与非阻塞模式 s.settimeout() 设置阻塞套接操作的超时时间 s.gettimeout() 得到阻塞套接操作的超时时间 面向文件的套接的函数...这些I/O缓冲区特性可整理如下: I/O缓冲区在每个TCP套接中单独存在; I/O缓冲区在创建套接时自动生成; 即使关闭套接也会继续传送输出缓冲区中遗留的数据; 关闭套接将丢失输入缓冲区中的数据

    2.4K30

    套接Socket编程

    在内核中,为每个Socket维护两个队列: 已经建立了连接的队列,这时候连接三次握手已经完毕,处于established状态 还没有完全建立连接的队列,这时三次握手还没完成,处于syn_rcvd状态。...在服务端等待时,客户端可通过connect函数发起连接: 先在参数中指明要连接的IP地址和端口号 然后开始发起三次握手 内核会给客户端分配一个临时端口。...UDP没有维护连接状态,因而无需每对连接都建立一组Socket,只要有一个Socket就能和多个客户端通信。...即最大连接数,系统会用一个四元组来标识一个TCP连接。 {本机IP, 本机端口, 对端IP, 对端端口} 服务器通常固定在某个本地端口上监听,等待客户端的连接请求。...一旦建立了一个连接,就会有一个已连接Socket,这时你可以创建一个子进程,然后将基于已连接Socket的交互交给这个新的子进程来做。

    1.4K10

    计算机网络:协议栈套接如何连接

    前面几篇文章讲解的是应用程序使用Socket间接通知协议栈进行的连接,通信阶段,那么从现在开始讲解协议栈和网卡驱动的故事回顾上篇文章,我们从第一阶段创建套接,协议栈返回描述符讲起~~~协议栈结构首先来看下协议栈的大致结构...ip地址);后面代表使用的端口号(根据套接生成的一个数字)foreignaddress:和loacladdress一样的格式,两者都是建立连接后才会显示数字的默认是0state是这个套接连接状态pid...:使用这个套接的应用程序,由于一个应用程序会有很多个网络请求因此也有多个套接应用程序通过socket向协议栈发起创建套接的请求时,协议栈会创建出一块内存并写入这个套接刚创建完成的初始化状态,并将代表这个套接的描述符返回给应用程序...这个步骤主要的工作是:填补客户端和服务端套接的控制信息也可以说是通信双方交换各自的控制信息并记录如对方的ip和port配置信息,这里的连接是指通信前的准备工作上一篇介绍查看套接的命令时,可以看到很多信息...收到客户端的连接后,也会取出对应的端口号判断出使用哪个套接,并把相关信息保存到套接中。

    20320

    accept()返回的套接绑定哪个端口 新旧套接的联系

    —成功, -1——失败 accept默认会阻塞进程,直到有一个客户连接建立后返回,它返回的是一个新可用的套接,这个套接连接套接。...此时我们需要区分两种套接,一种套接正如accept的参数sockfd,它是监听套接,在调用listen函数之后,一个套接会从主动连接套接变身为一个监听套接;而accept返回是一个连接套接...对于普通Socket,我曾经有个模糊的问题,在多线程情况下,服务器端监听(listen)某个端口(假设8080)后,每accept一个客户端的连接就会产生一个新的Socket。...—成功, -1——失败 accept默认会阻塞进程,直到有一个客户连接建立后返回,它返回的是一个新可用的套接,这个套接连接套接。...此时我们需要区分两种套接,一种套接正如accept的参数sockfd,它是监听套接,在调用listen函数之后,一个套接会从主动连接套接变身为一个监听套接;而accept返回是一个连接套接

    3.8K30
    领券