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

计算机基础知识

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

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

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

3、网络传输数据

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

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

网络基础知识

TCP/IP五层模型

物理层

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

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

数据链路层

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

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

以太网协议

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

ethernet规定

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

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

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

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

  • 数据包的具体内容

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

mac地址

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

广播

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

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

网络层

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

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

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

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

ICMP

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

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

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

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

传输层 (TCP/UDP)

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

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

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

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

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. ojdbc6下载地址

    https://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html oracle驱动先去官网下 ...

  2. go实现Windows服务注册

    go实现Windows服务注册 1.nssm下载:http://nssm.cc/download 2.服务注册 nssm.exe install 服务名  程序 样例如下: .\nssm.exe in ...

  3. windows wmi

    官网:https://msdn.microsoft.com/en-us/library/aa394132(v=vs.85).aspx WMI使用的WIN32_类库名:http://blog.csdn. ...

  4. python静态方法和类方法

    静态方法和类方法在python2.2中被引用,经典类和新式类都可以使用.同时,一对内建函数:staticmethod和classmethod被引入,用来转化类中某一方法为这两种方法之一. 静态方法: ...

  5. 归并排序_JAVA

    import java.util.Arrays; public class Main { public static void main(String[] args) { int[] a = { 6, ...

  6. 使用wget命令下载JDK失败(文件特别小)

    问题RT: 我们在网页上下载的时候要点一下 “Accept License Agreement ” ,使用wget下载的时候也需要提交这个 accept,方法如下: wget --no-check-c ...

  7. [Android] Android : lambda expressions are not supported at this language level(需设置project language level)

    最近在Github上下载一个别人的开源项目 ,里面用到了Javajdk1.8的新特性:Lambda 表达式.而我用的Android studio发现不能用这个Lambda 表达式. 本地环境: And ...

  8. ext Ext.grid.去除右边空白

    1.当Scroll没有显示时,Ext.grid右边会显示一个空白间隔. 2.解决办法<View> <ext:GridView ForceFit="true" Sc ...

  9. Git 命令解释优秀博文转摘

    git rebase http://blog.csdn.net/hudashi/article/details/7664631 git merge git reset http://www.cnblo ...

  10. Xshell 无法连接虚拟机中的ubuntu的问题

     转自:http://blog.csdn.net/qq_26941173/article/details/51173320 版权声明:本文为博主原创文章,未经博主允许不得转载. 昨天在VMware P ...