一、 cs架构和bs架构
二、 互联网
三、 osi七层
1.应用层2.表示层3.会话层4.传输层5.网络层6.数据链路层7.物理层
tcp/ip5层(5层名字记住:重点)
-1.物理层-网线,光纤-2.数据链路层-网卡-3.网络层-路由器-4.传输层(运输层)-四层路由器-5.应用层(会话层,表示层,应用层)-http协议,ftp协议,websocket协议...
3.1每一层的功能
1 物理层-网线----》01010101电信号---》从网线中传输电信号-8个比特位是一个字节2 数据链路层-数据帧:一组电信号是一个数据帧,有头和数据部分-网卡---》mac地址---》全球唯一---》网卡出厂--》烧在了网卡上-48位二进制---》看到的都是16进制表示-广播:-局域网内通信,所有人都会接受到,通过mac地址确定给谁的数据报,如果不是自己的就不处理-广播风暴3 网络层-跨局域网通信,需要经过网络层-IP地址:0.0.0.0-255.255.255.255-子网掩码:-192.168.1.1 255.255.255.0-192.168.2.1 255.255.255.0-ARP:ip和mac的对照表4 传输层:-端口:0--65535,一个应用程序可以监听多个端口,但是一个端口只能属于一个应用程序-TCP协议:可靠传输(可靠传输如何保证?三次握手,四次挥手)-UDP协议:不可靠传输5 应用层-htpp,ftp,websocket....
3.2传输层常用接口
应用程序 | FTP | TFTP | TELNET | SMTP | DNS | HTTP | SSH | MYSQL |
---|---|---|---|---|---|---|---|---|
熟知端口 | 21,20 | 69 | 23 | 25 | 53 | 80 | 22 | 3306 |
传输层协议 | TCP | UDP | TCP | TCP | UDP | TCP | TCP | TCP |
DNS:把网址转换成ip地址
从浏览器发送出去的数据,都是http协议,默认是80端口
3.3传输层TCP的三次握手和四次挥手
1 tcp可靠传输:三次握手,四次挥手保证数据可靠2 三次握手-客户端向服务端发送链接请求 1-服务端回复可以建立,并且带着跟客户端建立链接的数据报 2-客户端收到后,链接建好了 33 这个过程后就可以可靠传输数据4 断开链接(4四挥手)-客户端告诉服务端,要断开 1-服务端收到,回复ok 2-服务端可能还有数据在传递,暂时还没断开---等数据传完-服务端告诉客户端,我要断了 3-客户端收到,回复ok 4
四、Socket层
1 Socket抽象层,从osi七层抽象出来的,抽象了网络层和传输层,跟语言无关2 专门给开发人员用的
五、基于Tcp的socket套接字(重点)
服务端
#导入socket模块import socketimport time#第一个socket是模块名,第二个socket是类名#类实例化得到对象,得到一个socket对象#server=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)#不写默认就是他server=socket.socket()#绑定地址跟端口 ,传一个元组,监听的地址,监听的端口server.bind((\'192.168.11.28\',8008))#监听#半连接池是5,可以缓冲5个server.listen(5)#等待用户连接(看源码,有两个返回结果)#sock是连接对象,以后这个服务端和客户端交互,使用这个对象交互#addr是客户端地址(ip和端口)sock,addr=server.accept()#接收客户端发给我的消息data=sock.recv(1024)#打印print(data)#服务端给客户端发送消息(必须是byte格式)sock.send(b\'helloworld\')time.sleep(1)#关闭连接对象sock.close()#关闭服务server.close()
客户端
import socket#创建socket对象client=socket.socket()#连接服务端client.connect((\'127.0.0.1\',8008))#给服务端发了一个sbclient.send(b\'sb\')#收到了服务端给我的data=client.recv(1024)print(data)#关闭client.close()