网络编程
osi 七层,tcp/ip 五层
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 1 cs架构和bs架构
2 互联网
3 osi七层 tcp/ip五层 -物理层 -网线、光纤 -数据链路层 -网卡 -网络层 -路由器 -传输层(也叫运输层) -四层路由器 -应用层(会话层、表示层、应用层) http协议、ftp协议、websocket协议...
|
每一层功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 1 物理层 -网线 ----> 1010101电信号 -----> 从网线中传输电信号 -8个比特位是1个字节(重要) 2 数据链路层 -数据帧: 一组电信号就是一个数据帧/数据报,有头和数据部分 -网卡: ----> mac地址 ----> 全球唯一 ----->网卡出厂---->烧在网卡上 -48位二进制 ----> 看到的都是16进制表示 -广播: -局域网内通信,所有人都会接收到,通过mac地址确定是给谁的数据帧/数据报,如果不是自己的就不处理 -广播风暴 3 网络层 -跨局域网通信,需要经过网络层 -IP地址 -子网掩码 -ARP协议 : ip和mac的对照表 4 传输层 -端口: 0-65535, 一个应用程序可以监听多个端口,但是一个端口只能属于一个应用程序 -TCP协议: 可靠传输 -UDP协议: 不可靠传输
|
常用端口号
| 应用程序 |
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端口
TCP 三次握手四次挥手
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 1 TCP:可靠传输:三次握手,四次挥手保证数据可靠
2 三次握手 -客户端向服务端发送链接请求 ----1 -服务端回复可以建立你,并且带着跟客户端建立链接的数据报 ----2 -客户端收到后,链接建好了 ----3 3 这个过程后就可以可靠传输数据
4 断开链接(四次挥手) -客户端告诉服务器,要断开 ----1 -服务端收到,回复ok ----2 -服务端可能还有数据在传递,暂时还没断开-----等数据传完 -服务端告诉客户端,我要断了 ----3 -客户端收到,回复ok ----4
|
Socket层
1 Socket抽象层,从osi七层抽象出来的,抽象了网络层和传输层,跟语言无关,任何语言都会有socket的封装
2 专门给开发人员用的
基于TCP的socket套接字(重点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| (简易版本) 服务端 import socket sever = socket.socket() sever.bind(('192.168.11.123', 7777)) print('服务端启动完成,等待连接...') sever.listen(5) sock, addr = sever.accept() while True: data = sock.recv(1024) print('客户端发来的信息', data.decode('utf-8')) msg = input('请输入: ').strip() if msg == 'q': break sock.send(msg.encode('utf-8')) sock.close()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| (客户端) import socket
client = socket.socket() client.connect(('192.168.11.123', 7777)) while True: msg = input('请输入: ').strip() if msg =='q': break client.send(msg.encode('utf-8')) data = client.recv(1024) print('服务端发来的信息: ',data.decode('utf-8')) client.close()
|
总结
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 1 osi 七层模型 ----> 五层 -物理层 -10101000电信号----->网线、光纤 -数据链路层 -网卡---->mac地址,全球唯一 -广播: 局域网中通信 -网络层 -ip地址: ipv4,ipv6 -子网掩码+ip区分是不是属于同一个子网 -arp协议: ip和mac地址的映射表 -传输层(运输层) -端口: 0 --- 65535 -端口是用来区分应用程序的 -TCP: 可靠传输,三次握手,四次挥手 -UDP: 不可靠传输 -应用层 -http,ftp 2 常用的端口(重要) -80: http协议,基于TCP -3306 :mysql -53 DNS(域名解析)---->基于UDP 3 TCP/IP---->socket抽象层---->针对于程序员来写客户端,服务端的程序(更好写) 4 基于TCP的套接字(socket)的客户端和服务端
|