Day3: Python学习笔记之计算机基础——网络片
什么是互联网协议以及为何要有互联网协议?
?互联网协议本质上是为了方便连接两台计算机而指定的一系列统一的标准。
osi五层模型
计算机之间要实现数据传输必须要经过以下五层协议:
? 模型 ,协议 ,硬件
? 应用层, http协议、用户自定义协议
? 传输层, TCP/UPD协议 ,四层交换机、四层路由器
? 网络层, IP协议, 三层交换机、路由器
? 数据链路层, 以太网、电信号分组, 网桥、以太网交换机、网卡
? 物理层, 传递电信号 ,中继器、集线器、双绞线
用户感知到的只是上面一层应用层,自上而下每一层都依赖于下一层
物理层
主要是基于电器特性发送高低电压(电信号),高电压对应1,低电压对应0。
数据层
数据层对电信号定义了统一的分组方式,即以太网协议(ethernet)然后通过广播进行传输。
- 以太网协议:
- 一组电信号构成一个数据包,叫做‘帧‘
- 每一数据帧分成:报头head和数据data两部分
- head包含(固定18个字节):发送者/源地址(6个字节) + 接收者/目标地址(6个字节) + 数据类型(6个字节)
- data包含(最短46字节,最长1500字节):数据包的具体内容
- head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
- mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,就是head中包含的源和目标地址。
- 广播:有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)ethernet采用最原始的广播的方式,即计算机通信基本靠吼
数据:head + data
网络层:
有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,但是世界范围的互联网是由一个个彼此隔离的小的局域网组成的,网络层引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址。
- IP协议:
- 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
- 范围0.0.0.0-255.255.255.255
- 一个ip地址通常写成四段十进制数,例:172.16.10.1
- ip地址组成
- 网络部分:标识子网
- 主机部分:标识主机
注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网
- 子网掩码(DNS)
所谓”子网掩码”,就是表示子网络特征的一个参数,它在形式上等同于IP地址。通过”子网掩码”就能判断任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
- ip数据包
ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分
head:长度为20到60字节
data:最长为65,515字节。
而以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。
以太网头——ip头——ip数据
- ARP协议:通过IP + DNS 获取mac地址
数据:以太网头 + IP头 + IP数据
传输层
网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,为了标识这台主机上的应用程序,产生了端口,即应用程序与网卡关联的编号,而传输层就是建立端口到端口的通信。
- tcp协议
- 可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
- 以太网头 + IP头 + TCP头 + 数据
- TCP三次握手和四次挥手
- udp协议:
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
以太网头 + IP头 + upd头 + 数据
应用层
用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式
- 应用层功能:规定应用程序的数据格式。
- TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。
用户上网流程
- 本机的IP地址:192.168.1.100
- 子网掩码:255.255.255.0
- 网关的IP地址:192.168.1.1
- DNS的IP地址:8.8.8.8
用户数据→http、自定义→TCP、端口→IP→以太网→电信号传输
接收后在反向得到数据