网络协议

1. C/S、B/S 架构

C:client端   B:browse浏览器   S:server 端

1.1 C/S 架构:

​ 基于客户端与服务端之间的通信。 如QQ、抖音等。

​ 优点:满足个性化设置,响应速度快。

​ 缺点:开发成本、维护成本高,占用空间,用户固定。

1.2 B/S 架构:

​ 基于浏览器与服务端之间的通信。 如360、谷歌浏览器。

​ 优点:开发、维护成本低,占用空间相对低,用户不固定。

​ 缺点:功能单一,没有个性化设置,响应速度慢一些。

2. 网络通信原理

​ 1. 两台计算机要有一堆连接介质连接;

​ 2. 需找到对方计算机软件位置;

​ 3. 遵循互联网通信协议。

3. OSI七层协议(TCP/IP五层):

结构:应用层(应用层、表示层、会话层)、传输层、网路层、数据链路层、物理层

3.1 物理层:

​ 介质:光缆、双绞线(网线)、无线电波等。

​ 主要是基于电器特性发送高低电信号(1,0) 也叫比特流 010101110...

3.2 数据链路层:

​ 对电信号(比特流)进行分组,定义了分组方式。

3.2.1 以太网协议:

​ 对比特流进行合理的分组。按每一帧分割。

​ 一组电信号(比特流)数据构成一个数据报,叫做“帧”。

​ 每一个数据帧:由报头head和数据data组成。

​ 每帧最短64字节,最长1518字节,超过就会分片发送。

head data
固定18个字节(源地址6字节、目标地址6字节、数据类型6字节) 46—1500字节

3.2.2 mac地址:(物理地址)

​ 计算机上网卡上标注的地址(计算机地址)。

​ 12位16进制数组成表示(前六位是厂家编号,后六位是流水线号)。

​ 每帧的结构:源mac地址 目标mac地址 数据类型 | data

3.2.3 计算机通信方式:

​ 同一个局域网内,通过广播的形式通信。 局域网所有的计算机都能接受消息、分析消息。是否是找'我'(mac地址)的,不是就会丢弃。

​ 只能在局域网内进行广播。范围太大,会造成广播风暴,效率极低。

3.2.4 交互机的mac地址学习功能:

​ 前提:知道目标的mac地址。 在同一局域网下,第一次发消息是以广播形式,当交互机的接口记录到每个计算机的mac地址后,再发消息就是单播模式。

​ 单播:是一个单个的发送者和一个接受者直接通过网络进行的通信。

​ 广播:“一对所有”的通讯模式。

3.3 网络层:

​ 互联网是由一个个彼此隔离的小的局域网组成的。

​ 功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址。

3.3.1 IP协议

​ 能够确定局域网(子网)的位置。

​ 规定网络地址的协议叫Ip协议,它定义的地址称为IP地址,广泛采用IPV4,它规定网络地址由32位2进制表示。 范围为:0.0.0.0 ~255.255.255.255

​ 一个IP地址通常写成 四段十进制 , 如:192.168.14.144

IP地址分为两部分: 网路部分:标识子网

​ 主机部分: 标识主机

子网掩码:表示子网络特征的参数,中国是C类子网掩码:255.255.255.0

​ IP地址与子网掩码的二进制码分别进行AND(与)运算,就可判断两个IP地址是否在同一局域网(子网、网段)下。

​ 192.168.14.0 网关地址被占用

​ 192.168.14.255 广播地址被占用

​ 以上三个都属于192.168.14.0的局域网,一个局域网可连254台计算机。

3.3.2 ARP协议

​ 在实际情况中,我们无法知道目标的mac地址,因此需要通过一定的方法获取。

ARP协议可以从对方的IP地址获取到对方的mac地址 。

​ ARP协议功能:广播的方式发送数据包,获取目标主机的mac地址。

源mac地址 目标mac地址 源IP地址 目标IP地址 数据部分
发送端 发送端mac FF:FF:FF:FF:FF:FF 192.168.14.144 192.168.14.20 data

​ 第一次发消息:发送到交互机——>路由器:广播形式发出。 目标计算机接收到信息时,会返回消息,将自己的mac地址传回。

3.4 传输层

​ 端口协议:能够确定软件在计算机的位置。

​ 有65535个端口;0~1023操作系统专门使用的端口; 3306是数据库端口; 自己开发软件都是8080以后的端口号。

3.4.1 UDP协议(User Datagram Protocol):

​ 用户数据报协议:不可靠的、无连接的传输协议,传输效率高、面向数据包,尽最大努力服务,无拥塞控制。应用:域名系统(DNS),视频流,QQ, 微信。

3.4.2 TCP协议 (Transmission Control Protocol)

​ 可靠的、面向连接的协议、流式协议,传输效率低全双工通信,基于字节流的传输层的通信协议。应用:浏览器、文件传输等。

3.4.3 TCP协议的三次握手和四次挥手

  1. 建立连接(三次握手)

syn: 请求 seq :序列号

TCP三次握手的过程如下:

  1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
  2. 服务器端收到SYN报文,回应一个SYN(SEQ=x)和 ACK(ACK=x+1)报文,进入SYN_RECV状态。
  3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=x+1)报文,进入Established(连接)状态。

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

服务端可以将请求与确认同时传给客户端。

  1. 断开连接(四次挥手)

​ 客户端发送服务端数据时,在数据传输完成后,会马上发出fin=1的请求,主动请求断开连接。但此时,服务端可能还在给客户端传输数据,因此不能同时断开,需服务端在传输结束后,再次请求断开连接。所有共有4次挥手。

TCP四次挥手的过程如下:

建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。

  1. 客户端的应用进程首先调用close,称该端执行“主动关闭”(active close)。客户端的TCP会发送一个FIN(fin=1,seq=y)分节,表示数据发送完毕。
  2. 接收到这个FIN的服务端端执行 “被动关闭”(passive close),这个FIN由TCP确认,并返回一个ACK(ack=1+y),断开一个通道连接。

    ​注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,

    因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
  3. 一段时间后服务端也无数据可发时,服务端的应用进程会调用close关闭它的套接字。这导致它的TCP也发送一个FIN(fin=1,seq=y)分节。
  4. 接收到这个最终FIN的客户端,它的TCP会确认这个FIN,返回一个ACK(ack=1+y),断开另一个通道。

每个方向都需要一个FIN和一个ACK,因此需要4次。

syn洪水攻击:制造大量的假的无效的IP请求服务器,致使正常的IP访问不了服务器。

3.5 应用层

​ 自己定义的协议。

​ 应用层功能:规定应用程序的数据格式。

​ TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

广播(局域网内)+ mac地址(计算机位置)+ IP(局域网位置)+ 端口(软件在计算机的位置)

有了以上四个参数,就可以确定任何一台计算机的软件的位置。

扩展

路由器:

​ 外网(公网)IP:真正能够访问的地址;

​ 内网(局域网)IP:都是虚拟的IP的,由DHCP协议:路由器自动分配IP地址、网关等。

DNS服务器:

​ 域名解析(将网址解析成IP地址以及相应的端口)。

例:描述访问JD网站流程的步骤:

你的电脑输入"www.JD.com"网址,以单播的方式传到交互机,再以单播方式传到路由器,路由器将网址传给DNS服务器进行域名解析,然后将IP地址、接口等信息返回给路由器;路由器会根据据IP地址进行判断。
如果是同一个局域网,则以广播或者单播的形式访问到目标服务器的软件上。
如果不是同一局域网,会经过NPI:IP置换技术,将本机的IP地址换成路由器的IP地址,然后经过路由协议,选取最优的路线;找到目标路由,再以广播或者单播的形式访问到目标服务器的软件上(也可通过端口映射计算,能够直接连接到目标交换机上)。

python 28 网络协议的更多相关文章

  1. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

  2. python模块:网络协议和支持

    python模块:网络协议和支持 webbrowser 调用浏览器显示html文件 webbrowser.open('map.html') [webbrowser - Convenient Web-b ...

  3. Python的网络编程[4] -> DHCP 协议[0] -> DHCP 的基本理论

    DHCP协议 / DHCP Protocol 目录 DHCP 基本理论 DHCP 通信流程 DHCP 完整报文 DHCP 的 Optional 字段 DHCP 的报文类型 1 DHCP 基本理论 DH ...

  4. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器    定义:       ...

  5. 通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!

    摘要:在当今信息化时代,大多数企业都需要网络支撑企业的ICT运行,提升企业运行效率,针对企业网络中的网元设备(包括交换机,路由器,防火墙等),很多企业希望根据自身的业务特点定制网络管理,比如可以实现网 ...

  6. python之旅:网络基础之网络协议篇

    一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才 ...

  7. python全栈学习笔记(一)网络基础之网络协议篇

    阅读目录 一.操作系统基础 二.网络通信原理 2.1 互联网的本质就是一系列的网络协议 2.2 osi七层协议 2.3 tcp/ip五层模型讲解 2.3.1 物理层 2.3.2 数据链路层 2.3.3 ...

  8. 27 python 网络基础之网络协议

    一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才 ...

  9. Python网络编程(OSI模型、网络协议、TCP)

    前言: 什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系. 在数学上,网络是一种图,一般认为专指加权图. 网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类 型的实际问题中抽象 ...

随机推荐

  1. Linux卸载MySql——ubuntu版

    卸载mysql 1)删除mysql的数据文件 sudo rm /var/lib/mysql/ -R 2)删除mqsql的配置文件 sudo rm /etc/mysql/ -R 3)自动卸载mysql的 ...

  2. spark 源码分析之一 -- RDD的四种依赖关系

    RDD的四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和OneToOneDependency四种依赖关系.如 ...

  3. Ubuntu16.04配置Django服务器环境

    本环境是使用Ubuntu16.04+Django2.1.0+python3.6+uwsgi+nginx进行配置 1. 安装python3.6 Ubuntu16.04中原本安装的是python3.5,但 ...

  4. DataGridView 的使用总结

    一.属性应用 1.设置单元格鼠标点击后就进入编辑状态 设置DataGridView控件的EditMode这个属性,即 EditMode = System.Windows.Forms.DataGridV ...

  5. html5教程 《实用技巧》—让你的网站变成响应式的3个简单步骤

    如今,一个网站只在桌面屏幕上好看是远远不够的,同时也要在平板电脑和智能手机中能够良好呈现.响应式的网站是指它能够适应客户端的屏幕尺寸,自动响应客户端尺寸变化.在这篇文章中,我将向您展示如何通过3个简单 ...

  6. IOC容器-Autofac在MVC中实现json方式注入使用

    在你阅读时,默认已经了解IOC和autofac的基本用法, 我在最近的我的博客项目中运用了IOC autofac 实现了依赖注入 由于我的项目时asp.net MVC所以我目前向大家展示MVC中如何使 ...

  7. [__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x17deba00

    还真是一波未平一波又起,又出现了这个问题,详情如下: -[__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized ...

  8. js实现3D切换效果

    今天分享一个3d翻转动画效果,js+css3+h5实现,没有框架. 先看下html部分: <div class="box"> <ul> <li> ...

  9. Gridea+GitHub搭建个人博客

    某日闲余时间看到一篇介绍Gridea博客平台的文章,大概看了一下觉得此平台还不错,随即自己进入Gridea官网瞅了瞅.哇,这搭建过程也太简单了吧,比Hexo博客搭建要容易很多,而且还有后台管理客户端, ...

  10. c#小灶——初识c#

    提到c#,就不得不说.net,.net是微软开发的一个平台,简单来说,在这个平台上,可以编写.运行程序.可能很多人觉得这个平台离我们很遥远,其实不然,这个平台就一直在我们的windows操作系统里,默 ...