TCP的三次握手和4次挥手

这篇具有很好参考价值的文章主要介绍了TCP的三次握手和4次挥手。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、首先讲一下TCP的由来

最开始,人们考虑到将网络信息的呼唤与回应进行规范,达成一种公认的协议,就好像没有交通规则的路口设定交通规则。
人们设计出完美的OSI协议,这个协议包含七个层次由下到上分别是:
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
大家都觉得很完美但是现实总是会打破理想,十分现实。
人们发现在使用过程中,没有必要这么繁琐,很多层次也分的不必太清晰可以合并,于是在实践过程中,人们逐渐演变出更实用的TCP/IP协议。
TCP的三次握手和4次挥手,python基础,tcp/ip,网络,python

二、三次握手连接,四次挥手断开

画图解释吧更形象
TCP的三次握手和4次挥手,python基础,tcp/ip,网络,python

三、总结

3次握手的过程是双方都在准备资源,4次挥手的过程是让之前准备的资源释放。
这个时候可能会产生疑问为什么连接是三次挥手就要四次?
这是因为套接字是全双工的(同时收发数据无影响),所以关的时候要收发都关掉。
不知道有没有同学会跟我一样产生一个疑惑,为什么要客户端先调用close而不是服务器先调用close?
我经过查阅资料学习我们先来追溯一下收发信息原理的源头:TCP为了保证数据的可靠性,一般接收方在收到一个数据“请求断开连接”之后才会给发出方回应一个“收到,这边准备妥当不再接收”信息,但如果一直不回应,发送方就会一直等待回应,为了避免陷入这样一个循环,引入了超时时间机制,谁先调用close,发完消息之后等待一定时间,如果没有收到回应,发送方就再发送一次。但这个时候又出现一个问题,如果接收方给的回应迟了,超出了等待期限范畴,一边已经回应“收到,已准备妥当不再接收”,另一边因为等待时间内没有等到这条消息,会继续发送“请求断开连接”-等待(对方已经关闭接收了)-发-等待-发-等待…这就又陷入了一个循环,为了解决这个问题,我们引入了延时机制,也就是接收方接到断开请求,回复“收到,这边准备妥当不再接收”之后,让它等待约2MSL(MSL就是一个数据包在网络上传输的时间),确定收不到发送方再次发来的断开请求,再真正执行关闭接收操作。现实这段过程大概耗时为两分钟左右,在这段时间内接收方是不被允许释放资源的,这也就意味着这段时间内它所占用的端口不可以被其他程序所调用(程序虽然关了但是端口仍被占用,不利于资源的最大化利用)。这个时候,我们再来想,如果是服务器先调用close,这就意味着服务器先发出断开连接请求,也就意味着它要保留两分钟左右的资源的同时占用这个端口,但我们知道,服务端要绑定固定的端口,客户端不用呀,所以如果是客户端先调用close,它在等待保留资源的时候,操作系统再执行其他操作,分配资源时,端口是自由的,可以紧接着继续分配,达到对资源的最大化利用,刚刚好。所以客户端先调用close而不是服务器先调用close。

上码

import socket

def service_client(new_socket):
    """为这个客户端返回数据"""

    #1.接收浏览器发送过来的请求,即HTTP发送来的请求
    #GET /HTTP/2.0
    #...
    request=new_socket.recv(1024)#一般来说应该空间是够了
    print(request)
    #2.返回HTTP格式的数据给浏览器
    #2.1准备发送给浏览器的数据--head就是HTML那些
    response="http/2.0 200 OK\r\n"#浏览器不能解析换行符/n,必须使用/r/n的方式
    response+="\r\n"#不可或缺的换行符,代表着body即将到来
    #2.2准备一些--body部分内容,准备给浏览器送去
    #response+="<h1>xixizi</h1>"
    response+="xixizi"
    new_socket.send(response.encode("utf-8"))
    #关闭套接字
    new_socket.close()

def main():
    "用来完成整体的控制"
    #1.创建套接字
    tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #2.绑定
    tcp_server_socket.bind(("",65534))
    #3.变为监听套接字
    tcp_server_socket.listen(128)
    while True:
        #4.等待新客户端的链接
        new_socket,client_addr=tcp_server_socket.accept()
        #5.为这个客户端服务
        service_client(new_socket)
    #关闭监听套接字
    tcp_server_socket.close()

if __name__=="__main__":
    main()

TCP的三次握手和4次挥手,python基础,tcp/ip,网络,python
最近很努力在找实习,把尘封已久的知识重新翻出来再温习温习,不问前程,但行脚下文章来源地址https://www.toymoban.com/news/detail-842209.html

到了这里,关于TCP的三次握手和4次挥手的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TCP的三次握手,四次挥手

    第一次握手:客户端发送SYN报文,井发送seq为x序列号给服务端,等待服务端的确认 第二次握手:服务端发送SYN+ACK报文,并发送seq为Y的序列号,在确认序列号为x+1 第三次握手:客户端发送ACK报文,并发送seq序列号为z,在确认序列号为y+1 第一次挥手:先由客户端向服务器端发

    2024年01月18日
    浏览(72)
  • TCP的三次握手、四次挥手

    首先我们要知道建立连接的目的是什么,我们是为了可靠的传输数据。那既然是可靠的传输数据,我们必须保证客户端和服务端都能正常的发送和接收数据,如果某一方不能正常的发送或者接收数据,那整个数据的传输就不能成功,也就不可靠。 三次握手 1.第一次握手:第一

    2024年02月10日
    浏览(42)
  • TCP的三次握手四次挥手

    TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。 四次挥手:即终止TCP连接,就是指断开一个T

    2024年02月11日
    浏览(39)
  • TCP的三次握手和4次挥手

    最开始,人们考虑到将网络信息的呼唤与回应进行规范,达成一种公认的协议,就好像没有交通规则的路口设定交通规则。 人们设计出完美的OSI协议,这个协议包含七个层次由下到上分别是: 物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。 大家都觉得很

    2024年03月21日
    浏览(49)
  • TCP的三次握手与四次挥手

    参考文章:https://blog.csdn.net/qq_38950316/article/details/81087809 在介绍三次握手与四次挥手之前我们先来了解一下TCP的头部结构是什么样的。 TCP头部的最大长度为60字节,其中包括 TCP报文固定长度20字节+可变字节(最大40字节) ,具体结构如下: 在认识三次握手与四次挥手之前我们必

    2023年04月09日
    浏览(43)
  • TCP 的三次握手和四次挥手

    Java 面试题 第一次握手 :客户端向服务端发送SYN包。报文中标志位SYN=1,序列号seq=x(x为随机整数)。此时客户端进入了  SYN_SEND 同步已发送状态。 第二次握手 :服务端回复客户端SYN+ACK包。报文中标志位SYN=1,标志位ACK=1,序列号seq=y(y为随机整数),确认号ack=x+1(x为客户

    2024年01月20日
    浏览(52)
  • TCP的三次握手和四次挥手

    既然我们文章要说的是TCP的三次握手,和四次挥手,那么肯定是说的连接,也不是说的不其他的。那么它这个连接的过程说的是什么呢? 我们还是从图中理解,这样比较好理解, TCP第一次握手:服务端的TCP进程先创建传输控制块TCB,准备接受客户端进程的连接请求,然后服

    2024年02月01日
    浏览(48)
  • TCP的三次握手,四次挥手,面试必会

    目录 一、TCP三次握手(建立连接) 二、TCP三次握手细节 三、TCP(四次挥手)断开连接 四、TCP非常重要的协议 🤝🤝握手,单纯就是发一个打招呼的数据,不携带业务信息 那么为什么叫三次握手呢,因为B的中间两次可以合并成一次。 为什么我们要合并呢?💫💫 因为我们的

    2024年02月09日
    浏览(45)
  • TCP的三次握手和四次挥手······详解

    三次握手是 建立连接 的过程 如图大致为三次握手的流程图: 当客户端对服务端发起连接时,会 先发一个包 连接请求数据,去询问能否建立连接,该数据包称为 “SYN”包 然后,如果对方同意连接,那么对方将会回复一个 “SYN+ACK”包 客户端收到后,回复一个 “ACK”包 ,连

    2024年02月09日
    浏览(40)
  • TCP中的三次握手和四次挥手

    TCP中的连接和断开可以说是在面试中经常被问到的问题之一,正好有空就总结一下,首先回顾一下TCP的相关知识点 1.1 TCP的基本概念 我们知道TCP是运输层的面向连接的可靠的传输协议。 面向连接的 ,指的就是在两个进程发送数据之前,必须先相互“握手”,确保两进程可以

    2024年02月03日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包