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

北京网站开发报价绿色学校网站模板

北京网站开发报价,绿色学校网站模板,上海企业网络推广方案,做网站要用到数据库吗文章目录 Posix网络部分API综述TCP协议栈通信过程TCP三次握手和四次挥手#xff08;看下图#xff09;三次握手常见问题#xff1f;为什么是三次握手而不是两次#xff1f;三次握手和哪些函数有关#xff1f;TCP的生命周期是从什么时候开始的#xff1f; 四次挥手通信状态… 文章目录 Posix网络部分API综述TCP协议栈通信过程TCP三次握手和四次挥手看下图三次握手常见问题为什么是三次握手而不是两次三次握手和哪些函数有关TCP的生命周期是从什么时候开始的 四次挥手通信状态转换图由于数据包传输速率不同client先收到了FIN后收到ack状态是如何转换的 核心步骤建立连接socket函数bind函数listen函数listen函数的backlog参数的作用 accept函数connect函数 数据传输recv函数和send函数断开连接close函数问题思考双方如果同时调用close函数会发生什么同理双方同时调用了connect函数呢P2P模式会出现 Posix网络部分API综述 客户端socket、bind可以不绑定、connect、send、recv、close服务端socket、bind、listen、accept、recv、send、recv、close所有的语言进行网络通信只要是基于linux底层都会去调用这道api。 TCP协议栈通信过程 TCP三次握手和四次挥手看下图 参数解释 seqTCP头里的sequence代表发送的TCP包的序列号。ackTCP头里的acknum代表对上次接收到的TCP包的应答通常是上次接收包的seq号1。SYN和ACK代表标志位。syn和ack主要是实现了三个目的 防止数据丢失当我们发送出去的syn很久没有得到ack应答时就会进行重传等操作。防止数据重复可能对方因为某些原因对一个请求发了很多次应答可以依据这两个参数去防止数据重复接收。防止数据乱序这个很好理解就是根据seq和ack确保数据接收正确因为网络包在网络上的传输速率不同可能先发的包后面到。 另外三次握手建立连接时双方的第一个seq值是随机的。 三次握手 首先由通信双方的某一方后面就用client了其实server和client都是可以的发起连接请求即发送一个带SYN标志位的TCP数据包给server端。server端收到数据包后除了SYN位以外还会增加一个ACK确认位然后发送给clinet端。client端收到数据包后给server端回复一个带ACK确认位的数据包给服务端到此通信双方就算建立连接了。 常见问题 为什么是三次握手而不是两次 - 因为TCP连接是安全可靠的三次握手的话会保证双方都能接受到对方的数据第一次服务端收到客户端消息后可以确定客户端发送数据没问题然后第二次服务端发送给客户端消息客户端可以确定服务端的收发都没有问题但是服务端不知道客户端接收是否成功所以客户端还需要发一个数据包告诉服务端它的接收也没有问题因此这里是三次连接而不是两次。三次握手和哪些函数有关 首先肯定是connect函数调用后会发生第一次握手。listen函数调用后TCP协议栈会去监听client请求收到第一次握手后会向对方发送数据包这是第二次握手此时这个连接就被放入半连接队列里了。至于第三次握手是TCP协议栈完成的其实第二次也是收到第三次握手的数据包后会从半连接队列里校验校验成功后将其从半连接队列里mv到全连接队列。 TCP的生命周期是从什么时候开始的 从connect调用后就开始了。 四次挥手 第一次挥手是主动断开连接的一方发送带有FIN和ACK标志位的TCP包。第二次是被动断开连接一方在收到数据包后立马回应一个ACK标志位的TCP包告诉对方我收到了对方的包但是数据还没有处理完成,还有些工作要处理。第三次依然是被动断开连接一方在数据处理完成之后会给对方发送FIN和ACK标志位的TCP包告诉对方我数据处理完了你可以关闭连接了。第四次挥手是主动断开方发送ACK标志位的TCP包然后被动断开方就关闭连接了。 通信状态转换图 建立连接 服务端 初始状态为closed状态调用listen函数后进入LISTEN状态。收到SYN标志位的TCP包并向对方发送SYN和ACK标志位的TCP包后变为SYN_RCVD状态。收到对方带ACK标志位的包后变为ESTABLISTED状态至此连接建立。这里不是accept去完成三次握手的三次握手由TCP协议栈完成accept只是堵塞获取客户端信息的。 客户端 初始状态为closed状态调用connect函数发送SYN标志位的TCP包后进入SYN_SENT状态。由TCP协议栈完成后续的握手环节当connect函数成功返回后直接进入ESTABLISTED状态。 断开连接断开连接一般情况下可以是任意一方发起这里以客户端主动断开为例 服务端 当客户端主动断开连接后服务端收到FIN位的TCP包此时服务端的协议栈会立刻发送给对方一个ACK确认位此时服务端酒进入了CLOSED_WAIT状态。此时recv函数会继续去处理数据当读到数据长度为0并且数据全部处理完后服务端主动调用close函数关闭通信fd这时服务端会给客户端发送FIN标志位的TCP包然后服务端进入LAST_ACK状态。当服务端收到客户端的ACK标志位的包后服务端由LAST_ACK转变为CLOSED状态。 客户端 客户端主动调用closed函数关闭fd那么TCP协议栈会给服务端发送一个带SYN标志位的TCP包此后客户端进入FIN_WAIT1状态。当收到服务端带ACK标志位的TCP包后由FIN_WAIT1转变为FIN_WAIT2状态。当收到服务端带FIN标志位的TCP包并向服务端发送ACK标志位的TCP包后就进入了TIME_WAIT状态该状态会持续2MSLMSL为网络包在网络中的最大存活时间。当2MSL到达后转换为CLOSED状态。 注意 TCP的状态转换是由TCP协议栈管理的不是由代码管理。 由于数据包传输速率不同client先收到了FIN后收到ack状态是如何转换的 就是上图的由FIN_WAIT1状态直接到了CLOSING状态然后等收到了ack后再转换为TIME_WAIT。 核心步骤 建立连接 socket函数 socket函数做了两件事情 分配一个fd用来监听连接这里是采用bit_map的算法分配fd当对应fd位为0时就可以分配。创建一个TCP控制块TCB。 bind函数 其实bind函数就做了一个操作将ip和port设置到TCP控制块里的src ip和port。 listen函数 listen函数就像一个开关如果不调用listen函数的话是没有办法进行三次握手的。listen函数也做了两个事情 将tcb里的status设置为LISTEN状态。为tcb分配分配一个全连接队列和半连接队列。全连接队列指的是已经完成三次握手的半连接队列指还没有完成三次握手的 listen函数的backlog参数的作用 起初主要是为了防止syn第一次握手泄洪但是现在一般有堡垒机和防火墙这个参数不常用了。listen函数的backlog参数从70年代发展到现在大概有三个版本 指的是半连接队列的长度。半连接全连接队列的长度。全连接队列的长度。如今的版本 accept函数 accept函数做了两件事情 为该连接分配一个fd将fd绑定到从全连接队列取出来的连接tcb上这个用于通信的tcb是个五元组src ip和portdst ip和port传输协议和读写缓冲区。 注意若listen的sockfd被设置为ET模式那么需要循环调用accept去获取fd。 connect函数 向对方发送带SYN标志的数据包请求连接。 数据传输 recv函数和send函数 这两个函数是将数据从TCP缓冲区读到用户buffer里以及将用户数据写到TCP缓冲区里而不是直接端到端的同步通信这里是异步的数据什么时候从缓冲区发出去怎么发和send没有关系。 断开连接 close函数 close函数通信双方都可以调用也做了两个事情 关闭fd。告诉TCP协议栈向对方发送一个带FIN标志位的数据包。 server调用recv返回值为0的时候就意味着收到了对方的FIN数据包且TCP协议栈自动向对方发送ACK确认。第一次挥手此时server也可以调用close函数去关闭fd然后server会向对方也发送带FIN的数据包。 问题思考 双方如果同时调用close函数会发生什么 首先双方都向对方发送FIN数据包然后双方收到后都向对方发送ACK确认然后双方又向对方发送FIN最后双方都收到了对方的ack此时双方都产生了time_wait状态。服务器一般情况下不要去调用close函数减少time_wait状态出现 同理双方同时调用了connect函数呢P2P模式会出现
http://www.dnsts.com.cn/news/162821.html

相关文章:

  • 做哪些网站比较好cute主题破解版WordPress
  • 单位怎样做网站陕西省住房和城乡建设厅网官网
  • 临安做企业网站开了外网网站打不开
  • 甘南州合作市住房建设局网站天津南开做网站公司
  • 成都网站空间网站服务器和网站备案
  • 网站一直显示建设中手机怎么创网站免费
  • 建设部网站 绿色建筑评价表互联网网站建设
  • 网站搭建用什么语言资中移动网站建设
  • 网站允许flashwordpress 手机不显示图片
  • 华创网站建设建立主题网站的顺序是
  • 网站建设说课获奖视频wordpress双主题缓存
  • wamp做的网站上传建筑人才网兼职小时工
  • 宁波网站推广渠道程序员做任务的网站
  • 廊坊网站建设-纵横网络+网站企业网站制作流程图
  • 网站制作怎么学去哪学ps建设此网站的必要与可行性
  • 越秀区建设水务局网站私域电商平台排名
  • 保定网站建设制作wordpress有留言时邮件提醒
  • 什么网站可以自己做房子设计图确定网站建设目标
  • wordpress子目录多站点设置保定网站建设与seo
  • 企业整站优化网站的建设目标是什么
  • 钓鱼网站 企业形象人人开发app
  • 长沙网站seo报价网站设计 网站开发 优化
  • 石家庄免费网站建设公司宣传册设计样本百度网盘
  • wordpress中文站cnwordpress软件分享
  • 域名注册之后如何建设网站成都网站建设冠辰哪家强
  • 网站建设宣传ppt模板下载定制家具价格
  • 网站建设相关业务网站建设实训总结300
  • 做个电商网站需要怎么做龙游建设工程信息网站
  • 网站后台功能开发wordpress切换div组件
  • 重庆市建设公共资源交易中心网站首页初创公司 建网站