#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
随机推荐
- ES6学习
一.ES6的特点 1.let(变量),const(常量) 2.在ES6中不能重复定义 3.块级作用域 普通作用域 if(true){ var test =1; } console.log(test); ...
- 文本在div中始终垂直居中
如果是文本字数固定,在div中垂直居中,相信大家都会 这边分享个不固定文本在div中垂直居中的方法 html代码 <div class="box"> <div c ...
- weex 学习: 添加图标(使用阿里吧吧-icon)
添加图标(使用阿里吧吧-icon) <text slot="left" class="header-left"></text> i ...
- What is volatile?
What is volatile? 一次偶然的机会(java多线程电梯作业寻求多个进程分享变量的方法),接触到了volatile,因此我查阅了相关的材料,对这部分做了一些了解,在这里和大家分享一下. ...
- zepto与jquery冲突的解决
一般是不会把zepto和jquery一起来用的.但有时候要引入一些插件,可能就会遇到这样的问题. jquery noConflict() jquery有一个方法叫noConflict() ,可以把jq ...
- 多媒体文件格式(四):TS 格式
一.TS 格式标准介绍 TS是一种音视频封装格式,全称为MPEG2-TS.其中TS即"Transport Stream"的缩写. 先简要介绍一下什么是MPEG2-TS: DVD的音 ...
- [Swift]LeetCode75. 颜色分类 | Sort Colors
Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...
- [Swift]LeetCode808. 分汤 | Soup Servings
There are two types of soup: type A and type B. Initially we have N ml of each type of soup. There a ...
- 关于datagrid中数据条件颜色问题
前天公司考核中做了一个小的考核项目,在考核中一直没找到怎么设置datagrid中数据颜色的代码 他的题目是这样的: 项目资金小于50000时,项目资金数字需要红色文字显示,否则以绿色文字显示 后来找到 ...
- Python时间和时间戳互相转换
# 将时间变成时间戳 def tranftimestamp(stringtime): try: return time.mktime(time.strptime(stringtime, "% ...