python网络编程——网络基础

1.协议栈。

协议栈:先构建利用网络硬件在两台计算机之间传送文本字符串的原始对话功能,然后再此基础上创建更复杂、更高层、语意更丰富的对话。
协议栈包含四层:

①  对数据进行封装。
②  URL(统一资源定位符),标识了可通过HTTP获取的文档。
③  HTTP(超文本传输协议),支持面向文档的命令(例如:GET)。该层使用了原始TCP/IP套接字。
④ TCP/IP套接字,只处理字节串的发送和接收。协议栈的每一层都使用了底层协议提供的功能,并向上层协议提供服务。

socket() API 层之下的几层:

①  TCP(传输控制协议),该层通过发送(可能重发)、接收以及重排称为数据包的小型网络信息,支持由字节流组成的双向网络会话。
②  IP(网际协议),该层处理不同计算机间数据包的发送。
③  链路层,该层负责在直接相连的计算机之间发送物理信息,有网络硬件设备组成,如以太网端口和无线网卡。 

2.编码与解码。

解码(decoding):如果需要理解一些字节的意义,需要对通信信道间传输的原始字节进行解密。在应用程序使用字节时发生。
编码(encodeing):网络之间传输的代码,是程序将字符串对外输出时所实施的过程。
python代码

#!/usr/bin/python
#coding:utf-8
if __name__ == '__main__':
    char0 = b'\xff\xfeH\x00e\x00l\x00l\x00o\x00'
    char1 = char0.decode('utf-16')
    print(repr(char1))
    char3 = char1.encode('utf-16')
    print(char3)
##repr()方法是将对象转化为供解释器读取的形式。返回一个对象的 string 格式。

3.网际协议。

网络互联:通过物理链路将多台计算机连接,使之可以相互通信。
网际互联:将相邻的物理网络相连,使之形成更大的网络系统,比如:互联网。
数据包:网络设备之间进行共享的基本单元。
IP(网际协议):是为全世界通过互联网连接的计算机赋予统一地址系统的一种机制,它使得数据包能够从互联网的一段发送到另一端。

4.IP地址。

IP(IPV4)是为连接到万维网的每台计算机分配的一个四字节的地址。纯数字记忆不方便,人们都使用主机名(网址)代替IP地址。如:www.baidu.com,它的IP地址是:115.239.210.27。下面是python用来把主机名解析成IP的代码。
代码:

#!/usr/bin/python
#coding:utf-8
import socket

if __name__ == '__main__':
    hostname = 'www.baidu.com'
    addr = socket.gethostbyname(hostname)
    print('The IP address of {} is {}'.format(hostname,addr))

结果:在这里插入图片描述
传统的IP地址可以从左往右读:前两个字节表示某个机构,接下来的字节通常表示目标机器所在的特定子网,最后一个字节将地址细化至特定的机器或服务。下面是一些有着特殊含义的IP地址段。

  • 127.X.X.X :127开头的是特殊的预留地址段,供本地的应用程序使用。
  • 10.X.X.X / 172.16-31.X.X / 192.168.X.X :私有子网,这些地址没有意义,不对应任一主机。

5.路由。

向某个特定IP地址发送数据时,操作系统就需要决定如何使用该机器连接的某一物理网络来传输数据。根据目的IP地址选择将IP数据包发往何处就叫路由。

6.数据传输的过程(基于OSI七层参考模型)。

在这里插入图片描述
PC4的应用程序准备好数据发送给传输层,传输层经过处理将数据处理成可传输的数据段在一段一段的发送给网络层,网络层将每个数据段都加上源IP地址和目标IP地址将数据整合成数据包发送给数据链路层,数据链路层在给数据包加上源MAC地址和目标MAC地址并加上帧检验序列(FCS)在发送到物理层,物理层以传送比特流的形式将数据经过交换机、路由器等设备传给PC3的网卡,在一层层的解封装还原成原始数据。

猜你喜欢

转载自blog.csdn.net/qq_40909772/article/details/88207879