http中如何建立TCP连接
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章为大家展示了http中如何建立TCP连接,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 建立TCP连接1.1 TCP 服务端与客户端web服务的本
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
软件开发管理部门
数据库表格会被查重吗
网络安全密钥没反应
联想服务器sr588驱动安装
安全工程跨考网络安全
Bjob数据库文件名后缀
软件开发最佳小团队
yii数据库怎么自动生成
网络技术教程教材
广元app软件开发
网络技术的工作
勿忘初心网络安全
网络安全教育手抄报的字体
互联网科技与医药股
绍兴ios应用软件开发
zuche数据库的设计
计算机网络技术专业基础证书
中学生网络安全实例
网络安全概念股有哪几只
服务器怎么用管理口看型号
广东智能软件开发咨询
ios好用的股票软件开发
infomax 数据库脱敏
网络正常连不到服务器
数据库提供数据的存储功能
怀旧服部落最强的服务器
网络安全通信板块
sql读取数据库指定行
互联网高科技时代
济南职称评审 论文数据库