Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)
Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)
一丶CS/BS 架构
C/S: 客户端/服务器
定义:
这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上对用户的电脑操作系统环境依赖较大
比如:
qq、微信、网盘、优酷这一类是属于需要安装的桌面应用
优点:
安全性高,个性化设置,功能全面,响应速度快
缺点:
开发成本高,维护成本高.面向的客户固定
B/S:浏览器/服务器
定义:
Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。
比如:
百度、知乎、博客园等使用浏览器访问就可以直接使用的应用
优点:
开发维护成本低,面向用户广泛
缺点:
安全性相对低,响应速度相对慢,个性化的设置单一
二丶互联网通信的原理
1.首先通过各种物理连接介质连接
2.精准找到对方计算机(软件)的位置
3.通过统一的标准协议(互联网协议:一系列的协议)进行数据的收发.
三丶osi七层协议
物理层:
功能:
主要是基于电器特性发送高低压(电信号), 0低压 1高压
传输介质:
光纤 ,双绞线
数据链路层:
功能:
将电信号进行分组
以太网协议:
对比特流数据进行分组.
一组电信号构成一个数据报,也称作'帧'
每一数据报(帧)由: 报头head 和 数据data 组成. 结构如下图👇:
head (固定18个字节) | data(最短46字节,最长1500字节) |
---|---|
发送者/源地址6个字节, 接收者/目标地址6个字节, 数据类型6个字节 | head长度+data长度=最短64字节,最长1518字节. 超过最大就分片发送 |
mac地址:
每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
广播:
采用'大喇叭'方式进发送数据,目的地址为网络中所有设备的一种传输方式.
在局域网内的一台主机,发送数据,N台主机都要接收.这N台主机中必有一台主机接收数据.其他的主机则丢弃发送过来的数据.
# 发送数据格式: 本机mac地址 目标mac地址(未确定) 数据
# 源地址: 1C-1B-0D-FF-E8-8F 目标地址: FF-FF-FF-FF-FF-FF | 数据
广播原理图:
单播:
单播是客户端与服务器之间的点到点连接.
免局域网内每一次都广播的形式通信.记录双方的mac地址后,以后就可以单播,提升传输效率.
# 发送数据格式: 本机mac地址 目标mac地址(确定) 数据
# 源地址: 1C-1B-0D-DA-E8-8F 目标地址: 1C-1B-0F-4A-E8-8F | 数据
交换机原理:(原理摘自百度百科)
一种用于电(光)信号转发的网络设备
为接入交换机的任意两个网络节点提供独享的电信号通路
最常见的交换机是以太网交换机
交换机工作于OSI参考模型的第二层,即数据链路层
交换机拥有一条高带宽的背部总线和内部交换矩阵,在同一时刻可进行多个端口对之间的数据传输。交换机的传输模式有全双工,半双工,全双工/半双工自适应。
#交换机对照(网口与MAC地址的)表:
1: 1C-1B-0D-DA-E8-8F
2: FF-FF-FF-FF-FF-FF
3: FF-FF-FF-FF-FF-FF
4: FF-FF-FF-FF-FF-FF
5: 1C-1B-0F-4A-E8-8F
网口1: 出来一条信息:
# 第一次广播的形式发出去.
网口1:源地址: 1C-1B-0D-DA-E8-8F 目标地址: 1C-1B-0F-4A-E8-8F | 明天放假
# 局域网内每个网口都收到数据
2,3,4,5口接收到次消息,查看目标mac地址是否是自己的,
# 只有网口5 收到网口1 发送的数据
5口确定是自己的.
# 单播基于交换机的对照表
每个网口都广播发送消息一遍之后,对照表就构建好,下次在任意的网口在发消息,就直接以单播的形式发送.
目的: 避免局域网内每一次都广播的形式通信.以后就可以单播,提升效率.
网络层:
功能:
两台主机通信,定位主机的在哪一个局域网,
ip协议:
IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。
IP地址通常用"点分十进制"表示成(a.b.c.d)的形式,其中a,b,c,d都是0~255之间的十进制整数。
例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
ip地址分成两部分:
网络部分:标识子网
主机部分:标识主机
单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网
子网掩码:判断两个IP是否是在同一个网段
子网掩码: 一般都是C类.
255.255.255.0
# 判断两个IP 是否在同一个网段, 采用 and 判断
# ip地址+子网掩码如何确定局域网的位置?
一个ip: 172.16.10.1 : 10101100.00010000.00001010.00000001
子网掩码: 255.255.255.0 : 11111111.11111111.11111111.00000000
# 结果: 网段,子网,局域网: 172.16.10.0
另一个ip: 172.16.10.2: 10101100.00010000.00001010.00000010
子网掩码: 255.255.255.0 11111111.11111111.11111111.00000000
# 结果: 网段,子网,局域网: 172.16.10.0
# 证明两个IP是在同一个局域网.
## 一般情况下: C类子网掩码,一个局域网能承载多少计算机?
# C类子网掩码可以分配的ip数量: 254个.
# 一个局域网 最多可以分类254个ip地址(同一个局域网内的ip地址不能重复),也就是可以连接254台计算机.
# 总结
通过iP地址与子网掩码可以确定对方计算机是否和自己的计算机在同一子网.
如果确定在同一子网: 通过广播+单播就可以通信.
如果不确定在同一个子网: 需要通过交换机的传输,路由的转发.找到对方计算机.
ARP地址解析协议协议:通过IP或的对方的mac地址
### ARP协议:就是将对方的ip地址获取到对方的MAC地址
# 如果两个用户进行第一次通信的时候,你必须要知道对方的IP地址.
## 例如:
IP + ARP协议 获取对方的MAC地址
#案例:
# 站在 发送端角度,不知道对方的mac地址. 通过arp(地址解析协议),根据对方IP解析出对方mac地址
源mac 目标mac(未知) 源ip 目标ip 数据部分
发送端mac:1C-1B-0D-DA-E8-8F FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/34 数据
# 站在 接收端角度.接收完数据后,向发送端发送一条信息.告诉发送端,你已经接收数据
目标计算机
源mac:1C-1B-0F-4A-E8-8F目标mac 1C-1B-0D-DA-E8-8F 源ip: 172.16.10.11/34 目标ip:172.16.10.10/24
传输层:
传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP UDP就是在这一层。端口号既是这里的“端”。
会话层:
会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成
表示层:
表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。
应用层:
OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。
图解数据传输osi七层
发送方: 自上到下,每一层都对要发送的数据进行加工(封包),直至物理层传输完毕.
接收方: 自下而上 , 逐层解包,每层按照一定格式或协议,拆除指定段的数据, 直至应用层数据拆分完毕
两种模型,每层协议
TCP/IP:
网络接口层(链路层):
网络层: IP,ICMP,IGMP,【ARP,RARP】
传输层:TCP ,UDP,UGP
应用层:Telnet,FTP,SMTP,SNMP.
OSI:
物理层:EIA/TIA-232, EIA/TIA-499, V.35, V.24, RJ45, Ethernet, 802.3, 802.5, FDDI, NRZI, NRZ, B8ZS
数据链路层:Frame Relay, HDLC, PPP, IEEE 802.3/802.2, FDDI, ATM, IEEE 802.5/802.2
网络层:IP,IPX,AppleTalk DDP,【ARP,RARP】
传输层:TCP,UDP,SPX
会话层:RPC,SQL,NFS,NetBIOS,names,AppleTalk,ASP,DECnet,SCP
表示层:TIFF,GIF,JPEG,PICT,ASCII,EBCDIC,encryption,MPEG,MIDI,HTML
应用层:FTP,WWW,Telnet,NFS,SMTP,Gateway,SNMP
四丶UDP与TCP
tcp协议:
优点:
可靠传输,面向连接,面向字节流(流协议),安全性高,保证数据正确性,顺序性,仅支持单播传输,提高阻塞控制,提高全双工通信
缺点:
传输效率相对低,消耗资源大
TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
以太网头 | ip 头 | tcp头 | 数据 |
---|---|---|---|
TCP/IP传输五层模型:
TCP/IP协议簇
数据发送端是一层一层封装数据,数据接收端一层一层拆封,最后应用层获得数据。
tcp头信息
TCP报文包=TCP头信息+TCP数据体
### TCP头信息中包括了六种控制位:
# 1. URG 紧急数据 urgent-data
# 2. ACK 确认已收到
# 3. PSH 接收端应用程序应该立即从tcp接收缓冲区中读走数据
# 4. RST 表示要求对方重新建立连接
# 5. SYN 表示请求建立一个连接
# 6. FIN 表示通知对方 本端要关闭连接了
# 👇下图红框中展示了6中控制位
TCP详解摘自裸睡的猪 HTTP详解一文,仅供自己技术学习.
UDP协议:
优点:
面向无连接,面向报文,传输效率高,有单播,多播,广播的功能.非常节省资源
缺点:
不可靠传输,不保证数据的安全性,容易产生丢包现象
”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
以太网头 | ip头 | udp头 | 数据 |
---|---|---|---|
TCP和UDP的对比
TCP | UDP | |
---|---|---|
是否连接 | 面向连接 | 面向无连接 |
是否可靠 | 可靠的传输,采阻塞方法进行控流 | 不可靠,不可控 |
是否安全 | 安全的传输,保证数据的一致性,顺序性 | 不安全的传输(易丢包)不能保证数据的一致性,顺序性 |
传输方式 | 以字节流形式(TCP也称作流协议) | 以数据报文形式 |
头部消耗 | 最小20字节,最大60字节 | 仅8字节 |
连接方式 | 点对点通信 | 支持所有通信方式(点对点,广播,多播) |
应用 | 文本文件和数据 | 视频,即时通讯(QQ,威信) |
端口:
含义:
因此ip地址精确到具体的一台电脑,而端口精确到具体的程序。
"端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。
端口号的范围 0 ~ 655355 :
1~ 1025 系统占用端口号
1024~8000之内:一般的是由软件占用
五丶TCP的三次握手,四次挥手
TCP的三次握手:
是一种面向连接的、可靠的、基于字节流的传输层通信协议。如下图👇:
### 为什么必须是三次握手呢? 不是四次,或两次呢?
三次握手,既能保证数据传输的可靠性,也不消耗资源
两次,不能保证双端通讯正常
四次,浪费资源
三次握手讲解:
-
客户端发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,服务器由SYN=1知道客户端要求建立联机(客户端:我要连接你)
-
服务器收到请求后要确认联机信息,向A发送 ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包(服务器:好的,你来连吧)
-
客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(服务器的seq+1),ack=1,服务器收到后确认seq值与ack=1则连接建立成功。
(客户端:好的,我来了)
TCP的四次挥手:
讲解:
- client --->server: FIN (客户端关闭请求)
- server--->client:ACK(客户端关闭请求结果)
3.server---->client:FIN(服务端关闭请求) 保证服务端关闭前 数据 完全发送到客户端
4.client---->server: ACK (服务端关闭请求结果)