#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
随机推荐
- Python(day1)
一.Python的属于解释型语言. 编译型:一次性,将全部的程序编译成二进制文件,然后再运行. 优点:运行速度快. 缺点:开发效率低,不能跨平台. 解释型:当你的程序运行时,一行一行的解释,并运行. ...
- Spring Cloud 组件 —— feign
feign 作为一个声明式的 Http Client 开源项目.在微服务领域,相比于传统的 apache httpclient 与在 spring 中较为活跃的 RestTemplate 更面向服务化 ...
- PageHelper分页插件的使用
大家好!今天写ssm项目实现分页的时候用到pageHelper分页插件,在使用过程中出现了一些错误,因此写篇随笔记录下整个过程 1.背景:在项目的开发的过程中,为了实现所有的功能. 2.目标:实现分页 ...
- LSI IBM服务器阵列卡操作经历
说明:因为服务器的一个磁盘坏了,因为没有经验不敢操作.正好有一台撤下来的相同服务器,所以查找了各种教程,研究了一下各种操作.记录在这里,防止忘记.一.概念说明raid(自己百度)阵列卡组(group) ...
- [FPGA] 1、Artix-7 35T Arty FPGA 评估套件学习 + SiFive risc-v 指令集芯片验证
目录 1.简介 2.深入 3.DEMO 4.SiFive基于risc-v指令集的芯片验证 LINKS 时间 作者 版本 备注 2018-10-09 08:38 beautifulzzzz v1.0 到 ...
- JAVA设计模式—观察者模式和Reactor反应堆模式
被观察者(主题)接口 定义主题对象接口 /**抽象主题角色: 这个主题对象在状态上发生变化时,会通知所有观察者对象 也叫事件对象 */ public interface Subject { //增加一 ...
- [Swift]LeetCode115. 不同的子序列 | Distinct Subsequences
Given a string S and a string T, count the number of distinct subsequences of S which equals T. A su ...
- [Swift]LeetCode467. 环绕字符串中唯一的子字符串 | Unique Substrings in Wraparound String
Consider the string s to be the infinite wraparound string of "abcdefghijklmnopqrstuvwxyz" ...
- PHP算法之冒泡排序
//冒泡排序 //①思路,先比较出第一次,找一个最大的值,排到最后; //②重复count遍之后,就能得到排序; //③优化,每一次循环之后不需要再次全部重复; $array = [11,5,4,58 ...
- 前端基本知识(二):JS的原型链的理解
之前一直对于前端的基本知识不是了解很详细,基本功不扎实,但是前端开发中的基本知识才是以后职业发展的根基,虽然自己总是以一种实践是检验真理的唯一标准,写代码实践项目才是唯一,但是经常遇到知道怎么去解决这 ...