Python3-socket网络知识储备

时间:2023-01-01 13:55:18

本文参考文章:http://www.cnblogs.com/linhaifeng/articles/6129246.html

计算机基础知识

客户端软件基于网络发送一条信息给服务端软件,流程是:

1、客户端软件产生数据,存放于客户端软件的内存中,然后调用接口将自己内存中的数据发送/拷贝给操作系统内存

2、客户端操作系统收到数据后,按照客户端软件指定的规则(即协议),调用网卡发送数据

3、网络传输数据

4、服务端软件调用系统接口,想要将数据从操作系统内存拷贝到自己的内存中

5、服务端操作系统收到4的指令后,使用于客户都安相同的规则(即协议)从网卡接收到数据,然后拷贝给服务端软件

Python3-socket网络知识储备

网络基础知识

Python3-socket网络知识储备

TCP/IP五层模型

物理层

物理层由来:上面提到,孤立的计算机之间要想一起玩,就必须接入internet,言外之意就是计算机之间必须完成组网

Python3-socket网络知识储备

物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

数据链路层

数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思

数据链路层的功能:定义了电信号的分组方式

以太网协议

早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet

ethernet规定

  • 一组电信号构成一个数据包,叫做帧
  • 每一数据帧分成:报头head和数据data两部分

Python3-socket网络知识储备

head包含:(固定18个字节)

  • 发送者/源地址,6个字节
  • 接收者/目标地址,6个字节
  • 数据类型,6个字节

data包含:(最短46字节,最长1500字节)

  • 数据包的具体内容

head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

mac地址

head中包含的源和目标地址又来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址。

广播

有了mac地址,统一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)

ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼

Python3-socket网络知识储备

网络层

网络层由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由

一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,

这就不仅仅是效率低的问题了,这会是一种灾难

网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

ICMP

前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会.

我们一般主要用ICMP协议检测网络是否通畅,基于ICMP协议的工具主要有ping 和traceroute

arp : 广播的方式发送数据包,获取目标主机的mac地址

传输层 (TCP/UDP)

传输层的由来:网络层的ip帮我们区分子网,以太网的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,迅雷等多个应用程序,

那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序呢?答案就是端口,端口即应用程序与网卡关联的编号。

传输层功能:建立端口到端口的通信

补充:端口范围0-65535,0-1023为系统占用端口

Python3-socket网络知识储备

OSI七层:


物理层:以二进制的形式在物理媒体上传输数据。

数据链路层:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。在这一层,数据的单位称为帧

网络层:主要任务是选择合适的网间路由和交换节点,确保数据的传输,将帧数据封装成包, 路由协议以及地址解析,还包括拥塞控制、网际互联

传输层:传输层的数据单元是包;跟踪数据单元碎片,乱序到达的数据包和其他在传输过程中可能遇到的危险; 为上层提供透明的可靠的数据传输服务;传输层对上层屏蔽了通信传输系统的具体细节

会话层:会话层的数据传输单元是报文;会话层不参与具体的传输;会话层提供包括访问验证和会话管理在内 的建立和维护应用之间的通信机制

表示层:解决传输信息的语法表示问题,即提供格式化的表示和转换数据服务, 数据的压缩和解压缩, 加密和解密等工作都由表示层负责。将欲交换的数据从适合于某一用户的抽象语法, 转换为适合于OSI系统内部使用的传输语法

应用层:负责完成网络中应用程序与网络操作系统之间的联系;应用层提供文件服务、目录服务、文件传输等服务; 该层具有的各种应用程序可以完成和实现用户请求的各种服务;TCP协议需要依赖IP协议才能进行安全可靠的数据传输

Python3-socket网络知识储备的更多相关文章

  1. Python3 socket网络编程(一)

    Socket的定义 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了建 ...

  2. Python3 Socket网络编程

    Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket起源于UNIX,在 ...

  3. python【第八篇】socket网络编程

    内容大纲 1.socke基础 两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建 立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API ...

  4. python网络爬虫,知识储备,简单爬虫的必知必会,【核心】

    知识储备,简单爬虫的必知必会,[核心] 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌 ...

  5. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  6. Python面向对象进阶和socket网络编程-day08

    写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...

  7. Python面向对象进阶和socket网络编程

    写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self ...

  8. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  9. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

随机推荐

  1. 如何在HoloLens中创建一个2D的Hello World程序

    注:本文提及到的代码示例下载地址 > How to build an "Hello World" 2D app in HololLens. HoloLens 是微软的一款MR ...

  2. 【性能为王】从PHP源码剖析array_keys和array_unique

    之前在[译]更快的方式实现PHP数组去重这篇文章里讨论了使用array_flip后再调用array_keys函数替换直接调用array_unique函数实现数组去重性能较好.由于原文没有给出源码分析和 ...

  3. Intent属性详解三 data、type和extra

    1 Data  执行时要操作的数据 在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则: android:scheme 匹配url中的前缀,除了“http”.“ht ...

  4. 关于javascript面向对象的详解!

    认识面向对象 1.面向对象中的概念 一切事物皆对象 对象具有封装和继承特性 信息隐藏 2.基本面向对象 3.函数构造器构造对象 深入了解面向对象 第一种书写格式 第二种书写格式

  5. GridView获取CheckBox的值及所在列的ID

    //根据GridView的列数进行循环 ; i < GridView1.Rows.Count; i++) { //检查是否有ID为CheckBox1的CheckBox控件,如果有就赋值给Chec ...

  6. linux SPI bus demo hacking

    /********************************************************************** * linux SPI bus demo hacking ...

  7. Win8&period;1OS64位oracle11安装配置及PL&sol;SQL Developer怎样连接64位oracle

    Oracle 为什么选择oracle 1.oracle可以在主流的平台上执行,而相对于sql server仅仅支持windows,而windows在wr手里攥着呢,所以你懂的.在安全性上来讲,非常多地 ...

  8. Struts2配置RESULT中TYPE的参数说明

    chain           用来处理Action链,被跳转的action中仍能获取上个页面的值,如request信息.           com.opensymphony.xwork2.Acti ...

  9. 64位平台支持大于2 GB大小的数组

    64位平台支持大于2 GB大小的数组 64位平台.NET Framework数组限制不能超过2GB大小.这种限制对于需要使用到大型矩阵和向量计算的工作人员来说,是一个非常大问题. 无论RAM容量有多大 ...

  10. Opencv2&period;2版本以上CvvImage类的使用

    Opencv 2.2以上的版本不再包含CvvImage类,可有时我们在MFC中显示图片仍然需要CvvImage类,特别进行图像的拷贝.显示等操作的时候. 早期版本的CvvImage.h添加进工程也是可 ...