http中如何建立TCP连接
发表于:2024-09-28 作者:千家信息网编辑
千家信息网最后更新 2024年09月28日,本篇文章为大家展示了http中如何建立TCP连接,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 建立TCP连接1.1 TCP 服务端与客户端web服务的本
千家信息网最后更新 2024年09月28日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安全错误
数据库的锁怎样保障安全
江西戴尔服务器售价
gtj数据库
网络安全防范国际合作
全民总动员共筑网络安全防线
网络安全发现运营商
万达 软件开发工资待遇
软件开发公司app定制
互联网科技板块的股票有哪些股
手游地下城怎么无法连接服务器
网络安全培养活动简报
数据库开发应用软件 c
mysql数据库指向
现在流行什么样的数据库
国内vps动态服务器
全国省市区镇村数据库
锐思数据库的数据重复
form在数据库中什么意思
网络安全的最新趋势
各厂家服务器带外管理
网络安全主要包括哪些内容
怎么查看域名解析到哪台服务器的
爬虫导入数据库技术
维护区级网络安全
超市商品条码对应图片数据库
反向代理数据库
在数据库中增加一个注册会员
网页服务器安全漏洞有哪些
大学生注意的网络安全
服务器内存型号含义
组数据库