智慧治水网站系统建设,网站开发中网页上传和网站发布,深圳网站建设科技有限公司,网站相关前置许可前言
菜某的笔记总结
内网IP与公网IP
首先#xff0c;我们知道全球电脑数量众多#xff0c;但是IP有限#xff0c;所以我们无法每人分配一个IP。
应对这种情况#xff0c;我们就出现了内网IP和外网IP。
首先我的公司为路由器注册了一个公网IP#xff0c;那么外界对我…前言
菜某的笔记总结
内网IP与公网IP
首先我们知道全球电脑数量众多但是IP有限所以我们无法每人分配一个IP。
应对这种情况我们就出现了内网IP和外网IP。
首先我的公司为路由器注册了一个公网IP那么外界对我们进行访问的话就需要访问这个公网IP。
但是我们公司中又有许多电脑所以我们的局域网又会为每个电脑分配一个内网IP。
但是内网IP在外界是无法访问的他只能通过发送到公网IP上再经过一系列分析发送到相应的主机上。
而且内网IP有重复的情况。 内网IP形式的潜规则 10.0.0.0——10.255.255.255 172.16.0.0——172.31.255.255 192.168.0.0——192.168.255.255 其他的形式基本都是公网IP
查取自己公网IP的方法在百度中输入IP就出来了。
osi七层模型 物理层 打包以下的数据转化为二进制 数据链路层 双方Mac地址 网络层 双方IP地址 传输层 指定双方的端口 会话层 负责与目标建立断开连接 表示层 对数据加密解密编码 应用层 规定数据的协议格式getpost 原本数据 实际也就是数据包。
发送时需要一层层加包接收时需要一层层解包。
在代码中的体现 import socket #实例化对象 usersocket.socket 发送连接数据包 user.connect((161.165.149.155,80)) #应用层 content网站请求格式 #表示层 contentcontent.encode(utf-8) user.sendall(content) receuser.recv(1024) print(rece.decode(utf-8)) #会话传输 user.close() UDP和TCP协议
UDP不去建立连接直接发数据速度很快但是并不能确保他们到达目的地可能会出现数据为传达的情况。常常用在语音视频通话游戏画面等场所。
TCP发送和结束发送都需要发送特定数据包进行连接和断开它能够确保数据发送到如果没法送到会自动重新发送。但是由于步骤多所以传输的速度相对慢。常用于网站手机app。 UDP的代码写法 服务端 import socket seversocket.socket() sever.bind((127.0.0.1,9003)) data,(host,port)sever.recvfrom(1024)#接收UDP形式数据 print(data,host,port) 客户端 import socket clientsocket.socket() datainput(发送的内容) client.sendto(data.encode(utf-8),(127.0.0.1,9003)) #发送UDP型的数据 TCP的三次握手和四次挥手
三次握手客户端发送我要连接服务端返回同意客户端返回我也能接收到你的消息
代码层面实际上是生成一个数字让对方加一后返回
当对面没返回应答自己会重新发送
四次挥手客户端说我想离开服务端说我知道了等我处理一下信息服务端说我处理完了可以断开了客户端说可以我断开了。
粘包现象
生成原因
网卡有一个缓冲区我们发送都需要经过缓冲区再由缓冲区进行传输。但是如果我们发送的太快就会产生两个数据包合并了一个数据包。
send与sendall的区别
用socket的send函数发送时在网卡部分可能会没地方了导致你的数据只存进去了一部分所以用sendall的话会源源不断的进行发送知道发送全了为止。
解决方法
每次发消息前先发送4个字节这四个字节发送你将发送消息的长度然后你下一次接收数据只接受相应长度的字节这样就会把包给区分开。
但是还会出现类似sendall这种没发全的情况所以接收一方也要判断是否接收全接受全了再干别的。
接收时判断一下对方长度接收一次最多只能接收1024*8个字节那么应该设置个判断如果大于了就设置循环如果不足就规定接收相应的字节。
总结一下
就是要对接收的信息长度进行判断接收相应的长度即可。