http中如何建立TCP连接
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本篇文章为大家展示了http中如何建立TCP连接,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 建立TCP连接1.1 TCP 服务端与客户端web服务的本
千家信息网最后更新 2025年02月02日http中如何建立TCP连接web服务的本质,是一个TCP server, 浏览器则是一个TCP client。图3中黄色的部分就是建立TCP连接,只有先建立连接,浏览器才能通过这个连接发送http请求。你可能注意到,我直接越过了DNS解析,直接讲解第2部分内容,这是因为必须先理解TCP连接,才能理解DNS解析。 下面的代码是一份TCP 服务端的示例 上面所画的,阐述的是一种十分简单的理解,只是对功能进行了描述,并没有从技术层面上解答何为tcp3次握手,而想要从技术层面上做出解释,则必须先了解TCP头结构 下图是TCP头结构,客户端与服务端发送数据时,必须准守TCP/IP协议,按照指定的格式发送数据,TCP的头结构携带了许多关键信息,比如源端口号与目的端口号 注意看上图中,中间白色的那一块区域,找到SYN和ACK,这两个各占1个bit位,是3次握手的关键: 这便是TCP建立连接时的3次握手 看上去,似乎两次握手就可以了,服务端在收到SYN包后回复ACK确认可以建立连接不就行了么,为何非要让服务端也发SYN,客户端再回ACK呢? 之所要求3次握手,是为了防止已经失效的SYN包意外的到达服务端,造成双方的不一致。 考虑这种情况,客户端向服务端发出了SYN包S1, 可好巧不巧的是,S1由于网络阻塞或其他原因在网络中滞留,毕竟从客户端到服务器隔着十万八千里呢,中间是好多个交换机路由器等网络设备,网络也会堵车。发生网络堵车后,客户端以为S1丢包了,于是又发出一个SYN包S2,S2顺利的到达服务端,如果握手只需要两次,那么服务端回一个ACK就建立好连接了。 可别忘了网络中还有一个S1,S1并不知道客户端又发出了S2,它恪尽职守的穿越重重障碍,在S2之后到达服务端,如果这个时候S2所建立的连接还存在,那么服务端会无视S1,但如果S2所建立的连接已经断开了呢?服务端会以为S1是一个新的连接请求,服务端回ACK,建立连接,客户端收到ACK后,就有点懵逼了,它完全不知道是怎么回事,也不知道该如何处理这个突然到达的ACK包,这样一来,两边都会浪费很多资源。 2次握手建立连接,会发生上述的意外,但是3次握手就不会,服务端与客户端都要发送SYN包并回复对方ACK包,只有这样才会建立连接,服务端在回复ACK的时候,顺带着把SYN设置为1,这样就免去了单独发送SYN包的步骤,3次握手即可建立连接。
本篇文章为大家展示了http中如何建立TCP连接,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
1. 建立TCP连接
1.1 TCP 服务端与客户端
import socket
# 指定协议
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 让端口可以重复使用
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定ip和端口
server.bind(('0.0.0.0', 8080))
# 监听
server.listen(1)
# 等待消息
clientsocket, address = server.accept()
# 接收消息
data = clientsocket.recv(1024)
# 关闭socket
clientsocket.close()
server.close()
客户端代码的编写也十分容易
import socket
import time
host = '127.0.0.1'
port = 8081
addr = (host, port)
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接server
client.connect(addr)
# 向server发送数据
client.send(b'I am client')
# 接收server返回的数据
revcdata = client.recv(1024)
# 收到的数据都是bytes类型
print(revcdata.decode(encoding='utf-8'))
time.sleep(1)
client.close()
建立TCP的过程,有一个重要的概念---3次握手。这个问题经常在面试中被用来考察应聘者对于socket的了解程度。
1.2 什么是TCP3次握手
客户端与服务端在建立正是的连接之前,要互相试探着询问对方是否愿意与自己建立连接
客户端向服务端发送syn包,所谓的syn包,是指SYN为1
服务端收到syn包以后,发送syn+ack包,这时,SYN和ACK都是1
客户端向服务端发送ACK包,ACK标识位是1
1.3 为什么是3次握手,而不是2次
上述内容就是http中如何建立TCP连接,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
服务
客户
客户端
网络
数据
内容
结构
意外
代码
关键
口号
只有
对方
就是
层面
技术
技能
时候
浏览器
消息
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全防御新技术
两个串口同时发送数据库
网络安全龙头企业是哪些上市公司
ssh 连接多个数据库
参加网络安全知识答题活动
钉钉科技软件开发
江西服务器防火墙配置
文化遗产数据库的用户比重
数据库备份工具绿色免费版
csgo韩国服务器连接不到
数据库实验项目
科协网络安全周活动总结
长沙一果网络技术有限公司
淄博染色软件开发咨询
网络安全批处理脚本
网络安全技术应用与实务
物流软件开发就业前景
网络安全人才政企校联合
吉沃科技网络安全
国外专业数据库估值
阿里云服务器管理员怎么升级
全州网络安全知识培训
网络安全网管承诺书
人大金仓数据库协议
java 数据库模糊查询
沈阳做系统软件开发的
现代物流网络技术案例
三国全球服务器
小学生少先对网络安全提案
塔式服务器品牌