C/S架构:
即: 客户端 ——————————————————服务端 架构(基于TCP协议)
B/S架构:
即: 网页端 ——————————————————服务端 架构(基于HTTP协议)
1、互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层
七层:物理层——>数据链路层——>网络层——>传输层——>会话层——>表示层——>应用层
五层:物理层——>数据链路层——>网络层——>传输层——>应用层(会话层——>表示层——>应用层)
四层:网络接口层(物理层——>数据链路层)——>网络层——>传输层——>应用层(会话层——>表示层——>应用层)
2、物理层
? -本层对应的主要硬件设备为网线
? -数据被转化为高低电信号(01信号),通过网线传输
? -数据传输的基本单位为比特位,8个比特位为1个字节
?
3、数据链路层
? -数据链路层的功能:定义了电信号的分组方式,让01信号可以有效表达意义
? -本层主要的硬件设备为网卡
? -网卡上标识有全球唯一的MAC地址,对于计算机来说是独一无二的
? -以太网协议(ethernet):本层会对数据进行“打包”,叫做数据帧,结构为:报头+数据,报头是MAC地址,用 以标识本台计算机与目标计算机
? -广播:基于MAC地址,两台计算机在局域网内可以实现通信,具体过程为:源计算机打包数据——>广播——> 目标计算机接受数据——>解析数据——>根据目标Mac返回数据
4、网络层
? -有了以太网协议,MAC以及广播的方式,世界上所有的计算机就可以实现通信,但是要求所有计算机处于同一局域网,显然,这是不可能的,我们需要网络通信
? -ip协议:规定了网络地址为ip,范围为:0.0.0.0-255.255.255.255,一个ip地址通常写成四段十进制数,如:192.198.0.0
? -子网掩码:用于标识不同的局域网,形式和ip地址一样,由32位二进制组成,通过与ip地址按位与运算,可以查看两台计算机是否在同一局域网内
? -数据包:本层在数据帧的基础上,加入了ip头,用于标识两台计算机的网络位置
? -ARP协议:用于获取目标MAC,通过IP影射MAC,通过此项协议,实际上只需要IP就可以标识具体的某一台电脑
5、传输层
? -通过ip与MAC地址,我们可以找到独一无二的计算机,但是这台计算机可能运行着众多应用软件,我们需要找到目标软件
? -端口:端口即应用程序与网卡关联的编号。传输层的作用就是建立端口到端口的通信;端口范围0-65535,0-1023为系统占用端口
? -TCP/UDP协议
? -TCP协议:可靠的传输协议,因为其需要事先建立双向通路后,才会传输数据
? -UDP协议:不可靠的传输协议,不会确认是否建立双向通路就会开始传输数据,数据丢失找不回数据
? -数据段:会在网络层基础上加上TCP/UDP数据报头,称为数据段
6、应用层
? -用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式
? -应用层就是规定好数据传输的组织形式
? -使用的主要协议有:htpp,ftp,websocket....
7、三次握手与四次挥手
TCP协议在传输数据时,会提前建好双向的数据通路,建立过程就是三次挥手的过程,断开的过程就是四次挥手过程
1、三次挥手:
? -客户端向服务端发送建立连接请求:SYN=1,seq=x,SYN=1代表建立连接,seq验证信息
? -服务端收到请求,返回消息:同意建立&与客户单建立连接的请求:SYN=1,seq=y,ack=x+1
? -客户端收到请求,回复服务端可以,双向通路建成:ack=y+1
2、四次挥手
? -客户端向服务端发送断开连接请求:FIN,seq=X+2,ACK=y+1
? -服务端收到断开信号请求,客户端发送同意断开连接信息,连接断开:ACK=x+3
? -服务端向客户端继续传输数据,知道数据传输完毕,向客户端发送断开连接请求:FIN,seq=y+1
? -客户端收到断开信号请求,发送同意信号,连接断开
应用程序 | 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端口
1 Socket抽象层,从osi七层抽象出来的,抽象了网络层和传输层,跟语言无关,任何语言都会有socket的封装
2 专门给开发人员用的
# 导入socket模块
import socket
# 创建socket对象
server = socket.socket()
#绑定端口地址(监听ip,监听port)
server.bind((‘196.128.11.124‘,8008))
# 监听状态,半连接池是5,可以缓冲5个
server.listen(5)
# 等待用户连接,返回连接对象和客户端地址
sock,addr = server.accept()
# 接受客户端的信息
data = sock.recv(1024)
print("收到来自%s的信息%s" % (addr,data))
# 给客户端发消息
sock.send("sb".encode("utf-8"))
# 关闭连接对象
sock.close()
# 关闭服务
server.close()
import socket
# 创建socket对象
client= socket.socket()
# 连接到服务端
client.connect((‘196.128.11.124‘,8008))
# 给服务端发送信息
client.send("sb".decode("utf-8"))
# 接受服务端返回的数据
data = client.recv(1024)
print(data)
# 关闭
client.close()
原文:https://www.cnblogs.com/zhangchengchao123/p/14683681.html