当前位置: 首页 > news >正文

长沙武广新城建设网站建筑网站转发

长沙武广新城建设网站,建筑网站转发,南京凯盛建设集团官方网站,怎么做广告推广TCP连接断开 四次挥手 四次挥手过程 客户端发送FIN报文#xff0c;客户端进入FIN_WAIT_1状态。 服务端接收报文#xff0c;发送ACK报文#xff0c;服务端进入CLOSE_WAIT状态。 客户端收到ACK报文#xff0c;进入FIN_WAIT_2状态。 服务端处理完数据后#xff0c;也发送…TCP连接断开 四次挥手 四次挥手过程 客户端发送FIN报文客户端进入FIN_WAIT_1状态。 服务端接收报文发送ACK报文服务端进入CLOSE_WAIT状态。 客户端收到ACK报文进入FIN_WAIT_2状态。 服务端处理完数据后也发送FIN报文服务端进入LAST_ACK状态。 客户端接收报文发送ACK报文进入TIME_WAIT状态。 服务器收到ACK报文进入CLOSE状态。至此服务器关闭连接。 客户端在经过2MSL时间后自动进入CLOSE状态。至此客户端关闭连接。 主动关闭连接的一方才有TIME_WAIT状态。 为什么是四次挥手不是三次 在关闭连接时客户端向服务器发送FIN仅仅表示客户端不再发送数据但是可以接收数据。 服务器收到FIN报文时先回复ACK应答报文而服务器可能还有数据要处理和发送等服务器端不再发送数据时才发送FIN报文给客户端表示同意关闭连接。 所以因为服务端要等待完成数据的发送和处理所以服务端的ACK 和FIN是分开发送的所以需要四次挥手。 挥手丢失会发送什么 第一次挥手丢失客户端收不到ACK会触发超时重传机制重传FIN报文。 重发次数由 tcp_orphan_retries 参数控制。当客户端重传 FIN 报文的次数超过 tcp_orphan_retries 后就不再发送 FIN 报文则会在等待一段时间时间为上一次超时时间的 2 倍如果还是没能收到第二次挥手那么直接进入到 close 状态。 第二次挥手丢失客户端收不到ACK会触发超时重传机制重传FIN报文。ACK报文不会重传 如果关闭方调用close()函数关闭连接FIN_WAIT2状态不可以持续太久而tcp_fin_timeout 控制了这个状态下连接的持续时长默认值是 60 秒。 如果关闭方调用shutdown()函数关闭连接指定了之关闭发送方向而接收方向没有关闭那么意味着主动关闭方还是可以接收数据的。此时如果主动关闭方一直没收到第三次挥手那么主动关闭方的连接将会一直处于 FIN_WAIT2 状态 第三次挥手丢失服务端收不到ACK会触发超时重传机制服务端重传FIN报文。 当服务端被动关闭方收到客户端主动关闭方的 FIN 报文后内核会自动回复 ACK同时连接处于 CLOSE_WAIT 状态顾名思义它表示等待应用进程调用 close 函数关闭连接。 此时内核是没有权利替代进程关闭连接必须由进程主动调用 close 函数来触发服务端发送 FIN 报文。 服务端处于 CLOSE_WAIT 状态时调用了 close 函数内核就会发出 FIN 报文同时连接进入 LAST_ACK 状态等待客户端返回 ACK 来确认连接关闭。 第四次挥手丢失服务端收不到ACK会触发超时重传机制服务端重传FIN报文。 当客户端收到服务端的第三次挥手的 FIN 报文后就会回 ACK 报文也就是第四次挥手此时客户端连接进入 TIME_WAIT 状态。在 Linux 系统TIME_WAIT 状态会持续 2MSL 后才会进入关闭状态。 Socket编程 针对TCP如何Socket编程 服务端和客户端初始化 socket得到文件描述符服务端调用 bind将 socket 绑定在指定的 IP 地址和端口; 此时的Socket是监听Socket。 服务端调用 listen进行监听服务端调用 accept等待客户端连接客户端调用 connect向服务端的地址和端口发起连接请求服务端 accept 返回用于传输的 socket 的文件描述符 此时的Socket是已完成连接的Socket用来传输数据。 客户端调用 write 写入数据服务端调用 read 读取数据客户端断开连接时会调用 close那么服务端 read 读取数据的时候就会读取到了 EOF待处理完数据后服务端调用 close表示连接关闭。 listen时候参数backlog的意义 int listen (int socketfd, int backlog) // socketfd 为 socketfd 文件描述符 // backlog 参数随着历史版本变化在早期 Linux 内核 backlog 是 SYN 队列大小也就是未完成的队列大小。 在 Linux 内核 2.2 之后backlog 变成 accept 队列也就是已完成连接建立的队列长度所以现在通常认为 backlog 是 accept 队列。 但是上限值是内核参数 somaxconn 的大小也就说 accpet 队列长度 min(backlog, somaxconn)。 accept发生在三次握手的哪一步 由图片可见connect返回成功单向连接建立成功是在第二次握手之后服务端accept成功返回是在三次握手成功之后。 上图的具体步骤 客户端的协议栈向服务端发送了 SYN 包并告诉服务端当前发送序列号 client_isn客户端进入 SYN_SENT 状态服务端的协议栈收到这个包之后和客户端进行 ACK 应答应答的值为 client_isn1表示对 SYN 包 client_isn 的确认同时服务端也发送一个 SYN 包告诉客户端当前我的发送序列号为 server_isn服务端进入 SYN_RCVD 状态客户端协议栈收到 ACK 之后使得应用程序从 connect 调用返回表示客户端到服务端的单向连接建立成功客户端的状态为 ESTABLISHED同时客户端协议栈也会对服务端的 SYN 包进行应答应答数据为 server_isn1ACK 应答包到达服务端后服务端的 TCP 连接进入 ESTABLISHED 状态同时服务端协议栈使得 accept 阻塞调用返回这个时候服务端到客户端的单向连接也建立成功。至此客户端与服务端两个方向的连接都建立成功。 客户端调用close连接断开的流程是什么 调用close()说明没有数据要传输了服务端收到FIN后调用会read返回EOF当服务器端发送FIN服务端会调用close()客户端收到后进入2MSL的计时经过2MSL后进入CLOSE状态。 没有accept可以建立TCP连接吗 accpet 系统调用并不参与 TCP 三次握手过程它只是负责从 TCP 全连接队列取出一个已经建立连接的 socket用户层通过 accpet 系统调用拿到了已经建立连接的 socket就可以对该 socket 进行读写操作了。 所以就算不执行accept()方法三次握手照常进行并且会顺利建立连接。 没有listen可以建立TCP连接吗 客户端是可以自己连自己的形成连接TCP自连接也可以两个客户端同时向对方发出请求建立连接TCP同时打开这两个情况都有个共同点就是没有服务端参与也就是没有 listen就能 TCP 建立连接。
http://www.dnsts.com.cn/news/71354.html

相关文章:

  • 网站改版公告射阳网页定制
  • 免费推广网站软件网站开发与管理的专业描述
  • 秋长网站建设android开发软件有哪些
  • 一个网站如何做cdn加速建设一个简单的网站
  • 菏泽网站建设培训学校电子商务平台经营者制定平台服务协议和交易规则时
  • 网站布局的三种基本方法自学网站建设视频
  • 扬州网站建设系统开发需求
  • 云适配 网站大网站
  • 做网站导航cms公司网站主页模板
  • 商业网站的基本构成太仓有专门做网站的地方吗
  • 婴儿做相册的网站哈尔滨建设部网站
  • roseonly企业网站优化共享虚拟主机普惠版做网站
  • 咸宁哪个企业没有做网站做网站 花时间
  • 怎么做公司招聘网站做外贸可以在哪些网站注册
  • DW做注册网站苏州大学网站建设
  • 网站基础建设找别人做网站交货时应该注意什么
  • 网站建设外包质量进度跟进广州冼村旧改最新消息
  • 自定义优定软件网站建设买个网站多少钱
  • 网站建设方案书一定要有吗黄石网站建设多少钱
  • 阿里网站搭建国内平面设计公司
  • 承德做网站设计的深圳创业补贴政策2021
  • 东莞做网站公司哪家比较好本地佛山企业网站建设
  • 有域名后续怎么做网站怎么在百度上建立网站
  • 网站开发项目预算表自己怎么申请网站空间
  • 江苏网站建设费用网上做兼职网站有哪些
  • 花店网站建设文案秦皇岛在建工程项目
  • 大型网站后台登录地址一般是如何设置的网站建设登录注册怎么做
  • 用织梦同时做两个网站制作外贸型网站
  • 个人网站怎么建网站制作网站建设案例
  • 章贡区综合网站建设商家开鲁视频