前言

语言是用来交流的,人类语言使人与人交流,编程语言使人与机器交流,那么问题来了,机器如何与机器交流。你是否疑惑过:为什么我们可以使用浏览器查资料、为什么我们可以使用聊天软件聊天、为什么我们可以通过网络传输文件.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网络编程(一)的更多相关文章

  1. Python 网络编程(二)

    Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...

  2. Python 网络编程(一)

    Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  3. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  4. Day07 - Python 网络编程 Socket

    1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

  5. python网络编程-01

    python网络编程 1.socket模块介绍 ①在网络编程中的一个基本组件就是套接字(socket),socket是两个程序之间的“信息通道”. ②套接字包括两个部分:服务器套接字.客户机套接字 ③ ...

  6. 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档

    Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...

  7. Python网络编程基础pdf

    Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...

  8. python 网络编程(Socket)

    # from wsgiref.simple_server import make_server## def RunServer(environ,start_response):# start_resp ...

  9. python 网络编程 IO多路复用之epoll

    python网络编程——IO多路复用之epoll 1.内核EPOLL模型讲解     此部分参考http://blog.csdn.net/mango_song/article/details/4264 ...

  10. 自学Python之路-Python网络编程

    自学Python之路-Python网络编程 自学Python之路[第一回]:1.11.2 1.3

随机推荐

  1. 【安全性测试】解决关于appscan基于登录会话检测失败问题

    有些问题久了忽然就想通怎么解决了,很神奇.这次要说的是,关于appscan无法检测到会话的问题,因为在百度上一直找不到相关的解决方法,这个问题困扰了我很久,今天终于找到方法解决了! 日常配置扫描内容: ...

  2. vue Error: No PostCSS Config found in

    最近在做一个vue的移动端的项目,遇到一个问题,我本地的项目运行正常,可是上传到github上的一启动就报错,就是标题上的错误,找了很久,刚开始以为是某个css没有配置,就把本地的复制过去还是报错,无 ...

  3. Go语言基础之反射

    Go语言基础之反射 本文介绍了Go语言反射的意义和基本使用. 变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息. 值信息:程序运行过程中可动态变化的. 反射介绍 反射是指 ...

  4. Flutter 获取服务器数据

    文档 文档版本有些老 使用 dio 来获取数据 demo import 'dart:io'; import 'dart:convert'; import 'package:flutter/materi ...

  5. Spring中Model、ModelMap及ModelAndView之间的区别

    Spring中Model.ModelMap及ModelAndView之间的区别   1. Model(org.springframework.ui.Model)Model是一个接口,包含addAttr ...

  6. 删除 id 列表 存进数据库

    当图片写的传id的时候 用着方法存进数据库

  7. 配置 RIPv1 和 RIPv2

    拓扑图 场景您是公司的网络管理员.您所管理的小型网络中包含三台路由器,并规划了五个网络.您需要在网络中配置RIP路由协议来实现路由信息的相互传输.最初使用的是RIPv1,后来发现RIPv2更有优势,于 ...

  8. External Snapshot management

    External Snapshot management Symptom As of at least libvirt 1.1.1, external snapshot support is inco ...

  9. Redis结合Lua脚本实现高并发原子性操作

    从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis … 案例-实现访问频率限制: 实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次. 非脚 ...

  10. MapReduce计算模型的优化

    MapReduce 计算模型的优化涉及了方方面面的内容,但是主要集中在两个方面:一是计算性能方面的优化:二是I/O操作方面的优化.这其中,又包含六个方面的内容. 1.任务调度 任务调度是Hadoop中 ...