#8 Python网络编程(一)
前言
语言是用来交流的,人类语言使人与人交流,编程语言使人与机器交流,那么问题来了,机器如何与机器交流。你是否疑惑过:为什么我们可以使用浏览器查资料、为什么我们可以使用聊天软件聊天、为什么我们可以通过网络传输文件.etc。会与机器交流的人是少部分的,正是这少部分人让几乎所有人方便的使用网络,对于这所有人来说,他们想要聊天,只需要打开一个聊天窗口,输入文字,然后发送即可,他们并不会关注其背后的具体过程,因为背后的过程是复杂的,是由少部分人完成的。通过这本次系列的学习,你将成为少部分人!
一、网络编程概念
1.1 网络编程概念
网络编程听起来很高大上,但其实质就是进程之间的通信。再说的直白点,就是软件间的通信,可以是同一计算机的同一软件、同一计算机的不同软件、不同计算机的不同软件、不同计算机的同一软件。(看到这里,应该大概明白了进程就是软件了哇)
二、网络编程先修知识
2.1 计算机网络五层协议体系结构
为了介绍网络原理,通常习惯将计算机网络分为五层协议体系结构,从下至上分别为:物理层、数据链路层、网络层、运输层、应用层。
2.1.1 应用层
应用层是体系结构的最高层。直接为用户的应用进程提供服务,主要任务是通过应用进程间的交互来完成特定的网络应用。应用层协议定义的是应用进程间通信和交互的规则。
应用层的协议很多,例如大家熟知的HTTP协议、DNS、SMTP协议、FTP等等
『防抄袭:读者请忽略这段文字,文章作者是博客园的MinuteSheep』
2.1.2 运输层
运输层的主要任务是负责向两台主机中进程之间的通信提供通用的数据传输服务。
运输层主要有以下两种协议:
传输控制协议TCP(Transmission Control Protool)—— 提供面向连接的、可靠的数据传输服务
用户数据协议UDP(User Datagram Protool)—— 提供无连接的、尽最大努力的数据传输服务
2.1.3 网络层
网络层负责为分组交换网上的不同主机提供通信服务。
网络层最常用的协议为IP(Internet Protool)协议
2.1.4 数据链路层
两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层协议。
2.1.5 物理层
物理层主要的任务是传送比特流。
2.2 图解数据在各层之间的传递过程
上图是从《计算机网络》(第七版,谢希仁)扫描下来的,这幅图显示了整个计算机网络体系的传递过程。
假定主机1的应用进程AP1向主机2的应用进程AP2传送数据。AP1先将其数据交给本主机的第5层(应用层)。第5层加上必要的控制信息H5就变成了下一层的数据单元。第4层(运输层)收到这个数据单元后,加上本层的控制信息H4,在交给第3层(网络层),成为第3层的数据单元。一次类推,不过到了第2层(数据链路层)后,控制信息被分为两部分,分别加到本层数据单元的首部(H2)和尾部(T2);而第1层(物理层)由于是比特流的传送,所以不在加上控制信息。
当这串的比特流离开主机1经网络的物理媒体传送到路由器时,就从路由器的第1层依次上升到第3层。每层都根据控制信息进行必要的操作,然后将控制信息剥去,将该层剩下的数据单元上交给更高的一层。当分组上升到了第3层时,就根据首部中的目的地址查找路由器中的转发表,找出转发分组的接口,然后往下传送到第2层,加上新的首部和尾部后,再到最下面的第1层,然后在物理媒体上把每-个比特发送出去。
当这一串的比特流离开路由器到达目的站主机2时,就从主机2的第1层按照上面讲过的方式,依次上升到第5层。最后,把应用进程AP1发送的数据交给目的站的应用进程AP2。
『防抄袭:读者请忽略这段文字,文章作者是博客园的MinuteSheep』
2.3 TCP/IP简介
了解了上面五层网络体系结构之后,两台主机之间想要通信,那么最重要的问题就是:要给谁发?怎么发?发送的信息是否可以没有任何错误的到达?
2.3.1 IP协议
为了解决要给谁发?怎么发的问题,IP协议就诞生了。
- 为每一台计算机做了标识,这个标识就是IP地址,例如233.233.233.233,有了这个标识,就可以知道给谁发送了
- IP协议负责将数据从一台主机发送到另一台主机。发送方式是将数据划分为一段一段的,以IP包的形式发出去
2.3.2 TCP协议
发是能发了,但是能不能无差错的送到对方手中,又成了一个难题,TCP的诞生解决了这个问题:
- TCP是建立在IP协议之上的
- TCP通过3次握手的方式建立连接,然后对IP包进行编号,保证每个IP包可以顺利发送到对方手中,如果有一个包出现差错,就重新发送这个包
上图就是TCP建立连接(三次握手
#8 Python网络编程(一)的更多相关文章
- Python 网络编程(二)
Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...
- Python 网络编程(一)
Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
- python网络编程-01
python网络编程 1.socket模块介绍 ①在网络编程中的一个基本组件就是套接字(socket),socket是两个程序之间的“信息通道”. ②套接字包括两个部分:服务器套接字.客户机套接字 ③ ...
- 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档
Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...
- Python网络编程基础pdf
Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...
- python 网络编程(Socket)
# from wsgiref.simple_server import make_server## def RunServer(environ,start_response):# start_resp ...
- python 网络编程 IO多路复用之epoll
python网络编程——IO多路复用之epoll 1.内核EPOLL模型讲解 此部分参考http://blog.csdn.net/mango_song/article/details/4264 ...
- 自学Python之路-Python网络编程
自学Python之路-Python网络编程 自学Python之路[第一回]:1.11.2 1.3
随机推荐
- NOIP-比例简化
题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有 1498 人,反对的有 902 人,那么赞同与反对的比例可以简单的记为 1498:902 . ...
- vue的登陆验证及返回登录前页面实现
一.路由配置部分如下所示, 导出路由示例 let router = new VueRouter({ routes: [ // 登陆 { name: 'login', path: '/login', c ...
- Spring Cloud 微服务架构的五脏六腑,统统晒一晒!
Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...
- 数据库sql常见优化方法
以前刚开始做项目的时候,开发经验尚浅,每次遇到查询比较慢时,项目经理就会问:是不是又用select * 了?查询条件有没有加索引?一语惊醒梦中人,赶紧检查..果然如此! 有时我们写sql语句时,没有考 ...
- LeetCode题解39.Combination Sum
39. Combination Sum Given a set of candidate numbers (C) (without duplicates) and a target number (T ...
- [Swift]LeetCode378. 有序矩阵中第K小的元素 | Kth Smallest Element in a Sorted Matrix
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- [Swift]LeetCode810. 黑板异或游戏 | Chalkboard XOR Game
We are given non-negative integers nums[i] which are written on a chalkboard. Alice and Bob take tu ...
- Windows系统下安装Redis
1.首先你要有redis-latest-windws和redisclient-客户端工具 2.在redis-latest-windws文件夹内创建一个批处理文件 start.bat 创建批处理文件的 ...
- SQL执行错误#1064---保留字错误
CREATE TABLE IF NOT EXISTS `change` ( `id` INT NOT NULL AUTO_INCREMENT, `creator` VARCHAR(45) NOT NU ...
- Linux自启动执行脚本方法
1. 在/etc/rc.d/init.d/下创建脚本,要遵守service script的标准: 例如: vi /etc/rc.d/init.d/gfs #!/bin/bash#case " ...