python学习之网络基础
七 网络编程
7.1 C/S B/S架构
7.1.1 认识
Client : 客户端
Browser :浏览器
Server :服务器端
C/S:客户端与服务器之间的构架
B/S:浏览器与服务器之间的架构
7.1.2 特点
C/S
优点:安全性高,个性化设置,功能全面,响应速度快
缺点:开发成本高;维护成本高;(基于App),面向用户较固定
B/S
特殊的C/S架构
优点:开发维护成本低;面向用户较广泛;
缺点:安全性相对较低,响应速度较慢,个性化设置单一
7.2 互联网通信原理
互联网通信
1.物理介质,通信双方若要通信,首先保证要两端链路相同;
2.确定对端位置
3.通过统一的通信标准进行数据转发
7.3 OSI七层协议(TCP五层)
物理层
物理介质,包括:中继器、集线器、双绞线
发送的数据是比特数据流。主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0
数据链路层
分组数据:
按照一定的协议对比流数据进行分组
以太网协议:
Ethernet,统一的通信标准;
一组电信号构成一个数据报,叫做帧
帧的组成:报头head和数据data两部分,其中head包括:源地址,6个字节;目标地址,6个字节,数据类型6个字节;data包含:最短64字节,最长1500字节,数据报的具体内容
问题1:数据头为什么要固定?
固定的长度就是一个标准,方便提取源地址以及目的地址
问题2:以太网中源地址如何设置唯一?
网线直接接触的硬件就是网卡,网卡上有一个mac地址,确定计算机在网络中的唯一性,一个mac地址由12位16进制的数字串(前六位是厂商编号 后六位是流水线号)
广播
在同一局域网内进行广播,配合以太网协议进行通信 ,范围是在局域网内
单播
端到端进行数据交换
设备:
网桥,以太网交换机,网卡
网络层
寻址、路由选择、连接到建立、保持和终止
IP协议
IP地址+子网掩码,可以确定计算机所在的网段、子网、局域网位置;广播+mac地址+ip == 定位世界上任意一台计算机
IP v4中,规定网络地址由32位2进制表示,范围是0.0.0.0--255.255.255.255,一个IP地址通常写成十进制数
子网掩码:网络部分全为1,主机部分全位0;
IP数据包:head--长度为20到60字节,data--最长为65,515字节
ARP协议
地址解析协议,根据IP地址获取物理地址的一个TCP/IP协议,通过广播的方式将包含IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址。
工作流程:
1.通过IP地址和子网掩码区分子网
场景 | 数据包地址 |
---|---|
同一子网 | 目标主机mac地址,目标主机IP地址 |
不同子网 | 网关mac地址,目标主机IP |
2.如果处于同一网络,将源mac地址,目标mac(FF:FF:FF:FF:FF:FF),源IP地址,目标IP地址封包广播;如果不在同一个子网,将目标IP地址改成网关地址即可。
3.将arp数据包以广播的方式发送,所有主机都会拆包,检查目的IP地址是否是自己,若果是则响应将自己的mac地址封包发送。
传输层
端口协议,功能就是建立端口到端口的通信。广播+mac地址+ip+端口 == 定位世界上任意一台计算机对应的软件
传输层的功能是建立端口到端口的连接通信,其中端口范围0-65535,0-1023为系统占用端口
TCP 传输控制协议
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议;采用三次握手建立一个连接,采用四次挥手断开连接
三次握手
第一次握手:客户端向服务端发送syn(syn=x)包,并进入syn_sent状态,等待服务器确认,syn是同步序列编号
第二次握手:服务端接受请求报文,确认客户的syn(ack=x+1,ack是确认字符),同时向客户端发送一个syn包(seq=y),即syn+ack包,此时服务器进入syn_recv状态
第三次握手:客户端收到服务端的syn+ack包,向服务端发送确认包ack(ack=y+1),此包发送完毕,客户端和服务器进入established(TCP连接成功)状态,完成三次握手。
四次挥手
TCP连接时双向传输模式,客户端或者服务端都可以主动发起断开连接请求
第一次挥手:当主动端的应用程序通知TCP数据已经发送完毕时,TCP向被动端发送一个带有fin附加标记的报文段(fin表示英文finish)。
第二次挥手:被动段收到这个fin报文段之后,并不立即用fin报文段回复主动端,而是先向其发送一个确认序号ack,告诉主动端已接受请求,同时通知自己相应的应用程序:对方要求关闭连接(先发送ack的目的是为了防止在这段时间内,对方重传fin报文段)。
第三次挥手,被动端的应用程序告诉TCP:我要彻底的关闭连接,TCP向主动端送一个fin报文段。
第四次挥手,主动端收到这个fin报文段后,向被动端发送一个ack表示连接彻底释放。
为什么建立连接时是三次握手,而断开连接时是四次呢?
建立连接时,当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但断开连接时,当收到对方的FIN报文时,被动端不会马上关闭连接,但是会先发送一个ACK包,表示已经接到FIN报文,也就是说对方不再发送数据了但是还能接收数据,被动端是否现在关闭发送数据通道,需要上层应用来决定,因此,被动端的ACK和FIN一般会分开发送。
为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
假设网络是不可靠的,最后一个ACK有可能丢失。所以TIME_WAIT停留的2MSL给重发可能丢失的ACK报文预留的时间。
UDP协议
协议 | 优点 | 缺点 |
---|---|---|
TCP | 好人协议,流式协议,稳定安全 | 效率低 |
UDP | 效率高,传输快 | 不安全,无连接,不可靠 |
使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP),微信qq语音
应用层
在TCP五层协议中,将OSI中的会话层,表示层,应用层统一表示为应用层
功能:规定应用程序的数据格式
python学习之网络基础的更多相关文章
- python学习日记(基础数据类型及其方法01)
数字 int 主要是用于计算的,常用的方法有一种 #既十进制数值用二进制表示时,最少使用的位数i = 3#3的ASCII为:0000 0011,即两位 s = i.bit_length() print ...
- Python进程间通信和网络基础
Python进程间通信和网络基础 Python支持多种进程间通讯的方式, 有单机通信的signal和mmap等, 也有可以通过网络的socket方式, 这里先介绍select等的有关知识, socke ...
- Python服务器开发 -- 网络基础
Python服务器开发 -- 网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.... 网络由下 ...
- Python学习day16-模块基础
<!doctype html>day16 - 博客 figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { ...
- Python学习day12-函数基础(2)
<!doctype html>day12博客 figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { pos ...
- Python学习day11-函数基础(1)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习课程零基础学Python
python学习课程,零基础Python初学者应该怎么去学习Python语言编程?python学习路线这里了解一下吧.想python学习课程?学习路线网免费下载海量python教程,上班族也能在家自学 ...
- Python学习笔记之基础篇(-)python介绍与安装
Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...
随机推荐
- 2017 CVTE Windows开发二面 3.8 (offer)
中午1点左右,广州的号码打过来了,是CVTE的hr,然后问我下午4点半有没有时间,帮我约视频的二面. 当然有时间了啦,然后hr给我邮箱发了个链接,让我4点半登陆进去. 因为1面没问任何网络和操作系统的 ...
- C# JSON的序列化与反序列化
需要添加引用:System.ServiceModel.Web 和 System.Runtime.Serialization,然后使用Using: using System.Runtime.Serial ...
- vs2017 2019 下载更新慢的解决方法
国庆期间 下载的速度只有20多kb. 1.去掉网络适配器里面的 ip6勾选. 2.修改电脑的自动dns, 修改为1.1.1.1 , 修改为8.8.8.8 更快. 记得禁用再启用网络: dns为1. ...
- react -搭建服务-2
export const DEFAULT_TITLE = "你好"; // export const PRODUCT_SERVER_URL = "http://10.10 ...
- SEO搜索引擎优化是什么?
㈠什么是SEO? 搜索引擎优化,又称为SEO,即Search Engine Optimization,它是一种通过分析搜索引擎的排名规律,了解各种搜索引擎怎样进行搜索.怎样抓取互联网页面.怎样确定特定 ...
- EasyUI ComboBox ajax
ajax请求数据 $.post("get_select", { "type1" : "mytype" }, function(data) { ...
- CF G. Indie Album AC自动机+fail树+线段树
这个套路挺有意思的. 把 $trie$ 和 $fail$ 树都建出来,然后一起跑一跑就好了~ #include <queue> #include <cstdio> #inclu ...
- protoc 编译工具
在进行开发 protoc 之前,你需要首先在你的计算机中安装 protoc 编译工具. 下载编译工具 进入 Protocol Buffers 的源代码中然后选择发布的版本中,找到对应的版本.项目的链接 ...
- Horizon7.9部署和克隆问题汇总
1 基础环境说明 采用Windows server +SQL Server 2014进行部署,对接现有环境中的AD预控,系统版本为Windows server .桌面虚拟化软件版本采用Horizon ...
- C++入门经典-例5.19-指针的引用与传递参数
1:引用传递参数与指针传递参数能达到同样的目的.指针传递参数也属于一种值传递,其传递的是指针变量的副本.如果使用指针的引用,就可以达到在函数体内改变指针地址的目的.运行代码如下: // 5.19.cp ...