python网络-计算机网络基础(23)

1、网络简介

网络是由节点和连线构成,表示诸多对象及其相互联系。linux

一我的玩:编程

 

两我的玩:服务器

 

多我的玩:网络

说明socket

  • 网络就是一种辅助双方或者多方可以链接在一块儿的工具
  • 若是没有网络可想单机的世界是多么的孤单

使用网络的目的tcp

  • 就是为了联通多方而后进行通讯用的,即把数据从一方传递给另一方
  • 前面的学习编写的程序都是单机的,即不能和其余电脑上的程序进行通讯
  • 为了让在不一样的电脑上运行的软件,之间可以互相传递数据,就须要借助网络的功能
  • 所谓的网络编程就是,让在不一样的电脑上的软件可以进行数据传递,即进程之间的通讯

 

2、tcp/ip简介

1. 什么是协议函数

有的说英语,有的说中文,有的说德语,说同一种语言的人能够交流,不一样的语言之间就不行了工具

为了解决不一样种族人之间的语言沟通障碍,现规定国际通用语言是英语,这就是一个规定,这就是协议学习

2. 计算机网络沟通用什么测试

如今的生活中,不一样的计算机只须要可以联网(有线无线均可以)那么就能够相互进行传递数据,那么不一样种类之间的计算机究竟是怎么进行数据传递的呢?就像说不一样语言的人沟通同样,只要有一种你们都承认都遵照的协议便可,那么这个计算机都遵照的网络通讯协议叫作TCP/IP协议

3. TCP/IP协议(族)

早期的计算机网络,都是由各厂商本身规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容

为了把全世界的全部不一样类型的计算机都链接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议簇(Internet Protocol Suite)就是通用协议标准。

由于互联网协议包含了上百种协议标准,可是最重要的两个协议是TCP和IP协议,因此,你们把互联网的协议简称TCP/IP协议

经常使用的网络协议以下图所示:

说明:

  • 网际层也称为:网络层
  • 网络接口层也称为:链路层

 

3、端口简介

那么TCP/IP协议中的端口指的是什么呢?端口就好一个房子的门,是出入这间房子的必经之路。

若是一个进程须要收发网络数据,那么就须要有这样的端口

在linux系统中,端口能够有65536(2的16次方)个之多!

既然有这么多,操做系统为了统一管理,因此进行了编号,这就是端口号

2. 端口号

端口是经过端口号来标记的,端口号只有整数,范围是从0到65535

3. 端口是怎样分配的

  • 端口号不是随意使用的,而是按照必定的规定进行分配。
  • 端口的分类标准有好几种,咱们这里不作详细讲解,只介绍一下知名端口和动态端口

4.知名端口(Well Known Ports)

知名端口是众所周知的端口号,范围从0到1023

  • 80端口分配给HTTP服务
  • 21端口分配给FTP服务

能够理解为,一些经常使用的功能使用的号码比如:电话号码1十、1008六、10010同样

通常状况下,若是一个程序须要使用知名端口的须要有root权限

5.动态端口(Dynamic Ports)

  • 动态端口的范围是从1024到65535
  • 之因此称为动态端口,是由于它通常不固定分配某种服务,而是动态分配。
  • 动态分配是指当一个系统进程或应用程序进程须要网络通讯时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。
  • 当这个进程关闭时,同时也就释放了所占用的端口号。
  • 用“netstat -an”查看端口状态

六、端口总结

端口有什么用呢 ? 咱们知道,一台拥有IP地址的主机能够提供许多服务,好比HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)等,这些服务彻底能够经过1个IP地址来实现。那么,主机是怎样区分不一样的网络服务呢?显然不能只靠IP地址,由于IP地址与网络服务的关系是一对多的关系。其实是经过“IP地址+端口号”来区分不一样的服务的。 须要注意的是,端口并非一一对应的。好比你的电脑做为客户机访问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通讯,但你的电脑则可能使用“3457”这样的端口。

 

4、IP地址简介

IP地址就像是咱们的家庭住址同样,若是你要写信给一我的,你就要知道他(她)的地址,这样邮递员才能把信送到。计算机发送信息就比如是邮递员,它必须知道惟一的“家庭地址”才能不至于把信送错人家。只不过咱们的地址使用文字来表示的,计算机的地址用二进制数字表示。

IP地址是一个32位的二进制数,一般被分割为4个“8位二进制数”(也就是4个字节)。IP地址一般用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),其实是32位二进制数(01100100.00000100.00000101.00000110)。

ip地址的分类

A类IP地址

  • 一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,
  • 地址范围1.0.0.1-126.255.255.254
  • 二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110
  • 可用的A类网络有126个,每一个网络能容纳1677214个主机

B类IP地址

  • 一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,
  • 地址范围128.1.0.1-191.255.255.254
  • 二进制表示为:10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110
  • 可用的B类网络有16384个,每一个网络能容纳65534主机

C类IP地址

  • 一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”
  • 范围192.0.1.1-223.255.255.254
  • 二进制表示为: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110
  • C类网络可达2097152个,每一个网络能容纳254个主机

D类地址用于多点广播

  • D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。
  • 它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中
  • 多点广播地址用来一次寻址一组计算机
  • 地址范围224.0.0.1-239.255.255.254

E类IP地址

  • 以“1111”开始,为未来使用保留
  • E类地址保留,仅做实验和开发用

私有ip

  • 在这么多网络IP中,国际规定有一部分IP地址是用于咱们的局域网使用,也就
  • 是属于私网IP,不在公网中使用的,它们的范围是:
  • 10.0.0.0~10.255.255.255
  • 172.16.0.0~172.31.255.255
  • 192.168.0.0~192.168.255.255
  • IP地址127.0.0.1~127.255.255.255用于回路测试,
  • 如:127.0.0.1能够表明本机IP地址,用http://127.0.0.1就能够测试本机中配置的Web服务器。

 

5、子网掩码简介

要想理解什么是子网掩码,就不能不了解IP地址的构成。互联网是由许多小型网络构成的,每一个网络上都有许多主机,这样便构成了一个有层次的结构。IP地址在设计时就考虑到地址分配的层次特色,将每一个IP地址都分割成网络号和主机号两部分,以便于IP地址的寻址操做。

IP地址的网络号和主机号各是多少位呢?

若是不指定,就不知道哪些位是网络号、哪些是主机号,这就须要经过子网掩码来实现。

子网掩码不能单独存在,它必须结合IP地址一块儿使用。

子网掩码只有一个做用,就是将某个IP地址划分红网络地址和主机地址两部分子网掩码的设定必须遵循必定的规则。

与IP地址相同,子网掩码的长度也是32位,

  • 左边是网络位,用二进制数字“1”表示;
  • 右边是主机位,用二进制数字“0”表示。

假设IP地址为“192.168.1.1”子网掩码为“255.255.255.0”,子网掩码装换二进制位:11111111 11111111 11111111 00000000

  • 其中,“1”有24个,表明与此相对应的IP地址左边24位是网络号;
  • “0”有8个,表明与此相对应的IP地址右边8位是主机号。
  • 这样,子网掩码就肯定了一个IP地址的32位二进制数字中哪些是网络号、哪些是主机号。
  • 这对于采用TCP/IP协议的网络来讲很是重要,只有经过子网掩码,才能代表一台主机所在的子网与其余子网的关系,使网络正常工做。

最经常使用的子网掩码是“255.255.255.0”的网络:

  • 最后面一个数字能够在0~255范围内任意变化,所以能够提供256个IP地址。
  • 可是实际可用的IP地址数量是256-2,即254个,由于主机号不能全是“0”或全是“1”。
  • 主机号全为0,表示网络号
  • 主机号全为1,表示网络广播

 

6、socket简介

1.本地的进程间通讯(IPC)有不少种方式,例如

  • 队列
  • 同步(互斥锁、条件变量等)

以上通讯方式都是在一台机器上不一样进程之间的通讯方式,那么问题来了,网络中进程之间如何通讯?

2. 网络中进程之间如何通讯

  • 首要解决的问题是如何惟一标识一个进程,不然通讯无从谈起!
  • 在本地能够经过进程PID来惟一标识一个进程,可是在网络中这是行不通的。
  • 其实TCP/IP协议族已经帮咱们解决了这个问题,网络层的“ip地址”能够惟一标识网络中的主机,而传输层的“协议+端口”能够惟一标识主机中的应用程序(进程)。
  • 这样利用ip地址,协议,端口就能够标识网络的进程了,网络中的进程通讯就能够利用这个标志与其它进程进行交互

3. 什么是socket

  • socket(简称 套接字) 是进程间通讯的一种方式,它与其余进程间通讯的一个主要不一样是:
  • 它能实现不一样主机间的进程间通讯,咱们网络上各类各样的服务大多都是基于 Socket 来完成通讯的
  • 例如咱们天天浏览网页、QQ 聊天、收发 email 等等

4. 建立socket

在 Python 中 使用socket 模块的函数 socket 就能够完成:

socket.socket(AddressFamily, Type)

说明:

函数 socket.socket 建立一个 socket,返回该 socket 的描述符,该函数带有两个参数:

  • Address Family:能够选择 AF_INET(用于 Internet 进程间通讯) 或者 AF_UNIX(用于同一台机器进程间通讯),实际工做中经常使用AF_INET
  • Type:套接字类型,能够是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)

建立一个tcp socket(tcp套接字)

import socket

s = socket.socket(socket.AF_INET, SOCK_STREAM) print 'Socket Created'

建立一个udp socket(udp套接字)

import socket

s = socket.socket(socket.AF_INET, SOCK_DGRAM) print 'Socket Created'
相关文章
相关标签/搜索