架构
客户端
CS架构:client -> server
浏览器
BS架构:browser -> server
相互通信
相互通信的本质发送的是字节(01)
交换机的作用:为接入的网络节点提供电信号通路
路由器:连通不同的网络,另一个作用是选择信息传送的线路
通过在cmd中输入ipconfig查看自己的内网ip,公网ip需要租服务器
socket模块实现网络通信
黏包
通常一次的数据发送与接收的最大限度是1024字节,但是当超过这个限度时,此次的数据传送只包含1024字节,剩下的内容并没有丢失,当下次数据发送来时,就会发送上次超过限度的数据,依次向后延送,这就是黏包.
同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包。
import struct import subprocess import socket print("server link start ...") server = socket.socket() server.bind(("192.168.13.110", 9527)) server.listen(5) while True: con, di = server.accept() try: while True: ret = con.recv(1024).decode() # 操作命令 ret_command = subprocess.Popen(ret, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE ) ret_command_out = ret_command.stdout.read() # 操作指令执行后的内容长度 length_out = struct.pack("i", len(ret_command_out)) ret_command_err = ret_command.stderr.read() # 操作指令错误提示内容的长度 length_err = struct.pack("i", len(ret_command_err)) if ret_command_err: # 发送操作指令错误提示内容的长度 con.send(length_err) con.send(ret_command_err) else: # 发送操作指令执行后的内容长度 con.send(length_out) con.send(ret_command_out) except ConnectionResetError as e: con.close() continue
import struct import socket print("client link start ...") client = socket.socket() client.connect(("192.168.13.110", 9527)) # 建立连接 while True: # 不能发送空 content = input("请输入指令>>>>") if not content: continue client.send(content.encode()) ret_received = "" ret_received_length = 0 # 接收发送的内容长度 length = struct.unpack("i", client.recv(4))[0] ret_content = client.recv(1024).decode("gbk") # 将这个长度的内容接收完整 while ret_received_length < length: ret_received_length += len(ret_content) ret_received += ret_content print(ret_received)
三次握手
TCP名为传输控制协议,三次握手只是相比较来说保证了传输数据的可靠性,实际上任何协议多无法保证数据的完全可靠,三次握手通俗讲,发送方为A,接收方为B,第一次>>B知道自己可以接收到A发送的信息,第二次>>>A知道B可以接收到自己发送的信息,第三次>>双方确认完毕,A告诉B我们之间可以进行交流了
四次挥手
假设请求中断方为A,接收中断请求方为B.1>>A给B发送中断请求,2->>接收到中断请求后告诉A,你再等等我还没准备好,然后A继续等待,3->>发送消息给A我要断开连接了4->>A收到B的断开消息后,不信任,再次发送信息确认,若是B到信息则断开连接,没有则重传,此时A等到一段时间没有A的应答,知道B已经断开了,然后自己也断开连接
OSI七层模型
七层模型
五层模型
断开连接时反应到代码上:抛出异常/发送空内容;
1. DHCP,自动位局域网内容电脑分配IP。 2. 网关,路由器中连接交换机的口。 3. IP,4个点分的十进制表示 192.11.111.11 4. 子网掩码, IP: 192.168.13.99 掩码:255.255.255.0 将挡住的IP位数作为网段。 未挡住的部分作为可变的值。 5. 局域网/城域网/广域网 6. arp协议,ARP协议就是用来获取目标IP地址所对应的MAC地址的 7. DNS,域名解析,根据域名解析出IP
8. 端口,是为了将同一个电脑上的不同程序进行隔离。IP是找电脑,端口是找电脑上的程序,http网站默认端口:80 ;https网站默认端口:443,范围1 - 65535,一般8000