美文网首页
python-网络编程

python-网络编程

作者: SimonJoe246 | 来源:发表于2018-12-07 21:51 被阅读0次

网络通信

计算机为了联网,必须规定通信协议,最开始,各个厂商有各自的网络协议,互不兼容。后来,为了全世界不同类型的计算机都能互联,就必须规定一套全球通用的协议。互联网协议簇(Internet Protocol Suite),就是通用协议标准。Internet拆开就是连接网络的意思。

互联网协议有上百种,但最重要的是TCP和IP协议,因此,我们也把互联网协议称为TCP/IP协议。

相互通信的计算机需要知道对方的标识,接入互联网的计算机的标识就是其IP地址,例如123.123.123。如果一台计算机接入两个或多个网络,它就有可能有多个IP地址,所以,IP地址对应的其实是计算机的网络接口,通常是网卡。

IP地址分IPV4和IPV6

ipv4是一个32位整数,以字符串表示的IP地址是:xxx.xxx.xxx.xxx,其中,xxx是小于255的十进制整数,每组8位。以点分隔,称为“点分十进制”。

ipv6是一个128位整数,,以字符串表示的IP地址是:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx,例如2001:0db8:85a3:0042:1000:8a2e:0370:7334。每16位一组,分为8组,每组以16进制表示为4个字符,每个字符占4位。有一组全为0时可省略,冒号不可省略,相邻多组均为0时,均可省略,遵从这种规则,如果因为省略出现了两个以上的冒号,可以合并为一个。这种零压缩在一个地址中只能出现一次(防止歧义)。

  • 2001:0DB8:0000:0000:0000:0000:1428:57ab
    2001:0DB8:0:0:0:0:1428:57ab
    2001:0DB8::0:0:0:1428:57ab
    2001:0DB8::0:0:1428:57ab
    2001:0DB8::0:0:1428:57ab
    2001:0DB8::1428:57ab
    以上几组合法且等价,但
    2001::0D9e::57ca非法,因为不知道中间省略几组

TCP/IP

IP协议是将两计算机之间要通信的数据分割为一个个的小块,然后通过IP包发出去。由于互联网链路复杂,两台计算机之间通常由多条线路,路由器就负责决定如何把包发出去,IP协议的特点就是按包发送,途径多个路由,包不保证到达,也不一定顺序到达。

TCP协议是建立在IP协议之上的,负责在两台计算机之间建立可靠连接,保证按顺序到达,TCP协议会通过握手建立链接,对分割后的IP包编号,按序发送,如果包掉了,则重新发送。

常用的更高级的通信协议就是建立在TCP协议的基础上的,例如浏览器的HTTP协议,邮件的SMTP协议。

一个普通的TCP报文除了包含要传输的数据之外,还包括源地址,源端口,目标地址,目标端口。

端口有什么用?网络通信是两个计算机之间的通信,本质上来说是两个进程之间的通信,只拥有目标的IP地址是不够的,一个TCP报文来了,是交给浏览器还是QQ,就需要通过端口号进行区分,每个网络程序都会向系统申请唯一的端口号。两个进程在两台计算机之间的连接就需要各自的IP地址和端口号

同时与多个计算机连接的进程还需要向系统申请多个端口号。

建立网络连接的基本步骤

TCP编程

对于服务器来说,先建立socket,指定协议类型,然后为这个socket绑定监听的地址和端口,开始监听。

服务器可能有多块网卡,可以绑定到其中一块网卡的IP地址上。端口号需要指定,不同的端口号代表不同的服务,80端口是web服务的标准端口。25是SMTP的标准端口,小于1024的端口号是Internet标准服务端口,大于1024的,可以随意使用。

对于客户端来说,先建立socket,指定协议类型,通过connect指定服务器地址和端口

服务器通过accept接受一个connect连接,每个新连接都必须创建一个线程来处理TCP连接,不然单线程只能接受一个连接,无法在处理一个连接的同时接受其他连接。

UDP编程

UDP协议不需要建立连接,只需要知道对方的地址和端口号,就可直接发送数据包,收不收得到就不知道了 。不可靠,但优点是快。

r服务器端使用recvfrom同时接收数据和客户端地址(这个地址是一个tuple,包括IP地址和端口号,下同)

客户端发送数据使用sendto函数时也传入数据和目标服务器地址。

客户端从服务器接收数据仍然是recv

相关文章

  • Python-网络编程

    1.TCP/IP简介: 互联网上每个计算机的唯一标识就是IP地址,类似123.123.123.123。如果一台计算...

  • python-网络编程

    网络通信 计算机为了联网,必须规定通信协议,最开始,各个厂商有各自的网络协议,互不兼容。后来,为了全世界不同类型的...

  • Python-爬取页面内容(涉及urllib、requests、

    选择了适合的网络库 MonkeyLei:Python-网络基本工具库urllib、urllib2和requests...

  • python-数据库连接/网络编程

    1、连接 Python连接数据库需要借助第三方库,数据库的类型不同,使用的第三方库也不一样,本文以MySQL数据库...

  • python-网络编程-tcp/ip认识(一)

    本文作者:黎智煊,叩丁狼高级讲师。原创文章,转载请注明出处。 互联网的认识 首先来了解一下最早的互联网的背景. 互...

  • python-网络编程-tcp/ip认识(二)

    本文作者:黎智煊,叩丁狼高级讲师。原创文章,转载请注明出处。 端口 1 什么是端口 那么TCP/IP协议中的端口指...

  • python-网络编程-模拟聊天室

    本文作者:黎智煊,叩丁狼高级讲师。原创文章,转载请注明出处。 udp应用:echo服务器 模拟的是设置一个服务器,...

  • Python - 基础

    Python-开篇 Python是一种通用的解释型,交互式,面向对象的高级编程语言。它是由Guido van Ro...

  • Python-并发编程

    什么是进程 进程:一个程序的执行过程或者一个任务。 并发: 是伪并行,看起来是同时运行,其实通过单个cpu+多道技...

  • Android 网络编程 目录

    Android 网络编程 目录 Android 网络编程1 Http协议Android 网络编程2 Okhttp缓...

网友评论

      本文标题:python-网络编程

      本文链接:https://www.haomeiwen.com/subject/qtaxhqtx.html