TCP的三次握手和4次挥手

一、首先讲一下TCP的由来

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

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

画图解释吧更形象
在这里插入图片描述

三、总结

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

上码

import socketdef 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()

在这里插入图片描述
最近很努力在找实习,把尘封已久的知识重新翻出来再温习温习,不问前程,但行脚下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/541075.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RuoYi-Vue使用RestTemplate无法通过@Autowired注入报错

A component required a bean of type org.springframework.web.client.RestTemplate that could not be found. 解决方法&#xff1a; 将ruoyi-framework模块下找到ApplicationConfig这个配置类使用Bean注入&#xff1a; /*** RestTemplate配置*/Beanpublic RestTemplate r…

Linux信号灯

概念&#xff1a;是不同进程间或一个给定进程内部不同线程间同步的机制。类似我们的 PV操作概念&#xff1a; 生产者和消费者场景 &#xff30;(&#xff33;) 含义如下:if (信号量的值大于0) { 申请资源的任务继续运行&#xff1b;信号量的值减一&#xff1b;} else { 申…

防范服务器被攻击:查询IP地址的重要性与方法

在当今数字化时代&#xff0c;服务器扮演着重要的角色&#xff0c;为企业、组织和个人提供各种网络服务。然而&#xff0c;服务器也成为了网络攻击者的目标之一&#xff0c;可能面临各种安全威胁&#xff0c;例如DDoS攻击、恶意软件攻击、数据泄露等。为了有效地防范服务器被攻…

matplotlib-散点图

日期&#xff1a;2024.03.14 内容&#xff1a;将matplotlib的常用方法做一个记录&#xff0c;方便后续查找。 # 引入需要使用的库 from matplotlib import pyplot as plt# 设置画布大小 plt.figure(figsize(20,8),dpi 300)# 全局设置中文字体 plt.rcParams[font.sans-serif]…

项目性能优化—性能优化的指标、目标

项目性能优化—性能优化的指标、目标 性能优化的终极目标是什么 性能优化的目标实际上是为了更好的用户体验&#xff1a; 一般我们认为用户体验是下面的公式&#xff1a; 用户体验 产品设计&#xff08;非技术&#xff09; 系统性能 ≈ 系统性能 快 那什么样的体验叫快呢…

java复健-接口的开发及参数校验

遇到的问题以及解决方案 Q1. 开发接口的流程 A1&#xff1a; 明确需求阅读接口文档思路分析开发测试 Q2. 开发时用到的技术 A2&#xff1a; LomBok&#xff1a;Data&#xff0c;自动为我们的实体类创建构造方法&#xff0c;set&#xff08;&#xff09;&#xff0c;get&am…

探索仿函数(Functor):C++中的灵活函数对象

文章目录 一、仿函数定义及使用二、仿函数与函数指针的区别三、仿函数与算法的关系四、仿函数的实践用例 在C编程中&#xff0c;我们经常需要对数据进行排序、筛选或者其他操作。为了实现这些功能&#xff0c;C标准库提供了许多通用的算法和容器&#xff0c;而其中一个重要的概…

GPU性能测试中的张量和矩阵运算

正文共&#xff1a;888 字 7 图&#xff0c;预估阅读时间&#xff1a;1 分钟 前面我们使用PyTorch将Tesla M4跑起来之后&#xff08;成了&#xff01;Tesla M4Windows 10AnacondaCUDA 11.8cuDNNPython 3.11&#xff09;&#xff0c;一直有个问题&#xff0c;那就是显存容量的问…

“CT每多做一次,患癌风险就增加43%”冲上热搜,CT到底还能不能做?

多家媒体报道某专家称做一次 CT 患癌风险提高 43%&#xff0c;这个让很多朋友感到很恐慌&#xff0c;甚至拒绝 CT 和 X 线检查&#xff0c;那么这种说法到底有道理吗&#xff1f; 先说结论&#xff0c; 这其实是该话题在传播过程中省略了很多关键信息&#xff0c;结果造成了误…

51单片机产生波特率的计算分析,为什么常见11.0592mhz

数据手册中的资料 参考短文&#xff0c;机械周期 对波特率产生的计算分析 经常看到的公式是 b a u d f s o c / 12 / ( 计时器溢出需的数量 ) 2 s m o d ∗ 16 baud \dfrac{f_{soc}/12/(计时器溢出需的数量)}{2^{smod}*16} baud2smod∗16fsoc​/12/(计时器溢出需的数量…

类似爱加速的代理ip软件有哪些?叫什么

和爱加速相似的换IP软件有很多&#xff0c;其中一些比较知名的包括&#xff1a;虎观代理、花生代理等&#xff0c;这些软件都可以提供类似的功能&#xff0c;帮助用户更换IP地址以保护网络隐私和加速网络访问等目的。用户可以根据自己的需求和喜好选择合适的换IP软件使用。 如果…

激活函数理解

前言 为什么神经网中非要有各种各样的激活函数&#xff1f;他们有什么用&#xff1f;没有他们会怎样&#xff1f;常见的激活函数有哪些&#xff0c;他们都有什么特点&#xff1f; 如果我们不运用激活函数&#xff0c;神经网络的输出信号将仅仅是一个简单的线性函数。线性方程…