本章目录

一、基础概念

1、TCP/IP

TCP/IP是标准的协议,使得世界范围内的计算机通过Internet或本地的网络通信。

Python网络编程基础【底层网络】_客户端

2、首要问题:实现寻址

Python网络编程基础【底层网络】_客户端_02

3、域名DNS

Python网络编程基础【底层网络】_socket_03

4、使用客户/服务器模式

Python网络编程基础【底层网络】_网络编程_04

5、服务器的端口号

Python网络编程基础【底层网络】_端口号_05

6、客户端的端口号

Python网络编程基础【底层网络】_端口号_06

7、UDP

Python网络编程基础【底层网络】_客户端_07

8、选择TCP还是UDP

Python网络编程基础【底层网络】_socket_08

Python网络编程基础【底层网络】_客户端_09

9、Internet,物理传输,路由

Python网络编程基础【底层网络】_知识体系_10

10、总结

TCP/IP协议可以用于多种不同的传输,如以太网和移动网络。
每个终端靠唯一的IP地址和端口号来区分。
服务器通过一些事先知道的端口来侦听连接。
数据传输协议

TCP:可以提供可靠性和完整的会话;
UDP:用于小并且简短但快速的会话。

二、网络客户端

1、Socket

Python网络编程基础【底层网络】_知识体系_11

2、建立socket

Python网络编程基础【底层网络】_socket_12

3、寻找端口号

问题:查询一个服务器端口号的列表

实例:http转换为一个端口号,你用协议名和端口名

4、从socket获取信息

Python网络编程基础【底层网络】_客户端_13

5、处理错误

Python网络编程基础【底层网络】_socket_14

6、Socket异常

Python网络编程基础【底层网络】_端口号_15

7、4种异常

Python网络编程基础【底层网络】_客户端_16

8、总结

网络通信的基本接口:socket

socket()建立socket
connect()建立连接

三、网络服务器

1、特点

等待来自客户端的请求,发送应答。

2、准备连接

建立socket对象
设置socket选项(可选)
绑定到一个端口/一个指定的网卡
侦听连接

3、使用UDP

Python网络编程基础【底层网络】_网络编程_17

4、死锁的发生

Python网络编程基础【底层网络】_知识体系_18

5、避免死锁

死锁发生在一个服务器和客户端同时试图往一个连接上写东西和同时从一个连接上读的时候。

确保客户端每次执行完send()后,进行一次recv()

使客户端发送较少的数据。

使用多线程等,使客户端同时发送和接收。

6、总结

Python网络编程基础【底层网络】_知识体系_19

四、域名系统(DNS)

1、定义

Python网络编程基础【底层网络】_客户端_20

2、进行DNS查询

(1)本地解析

Python网络编程基础【底层网络】_socket_21

(2)直接解析

Python网络编程基础【底层网络】_socket_22

(3)递归解析

Python网络编程基础【底层网络】_网络编程_23

(4)迭代解析

Python网络编程基础【底层网络】_网络编程_24

3、防止反向查询欺骗

先进行反向查询,你将根据IP地址得到一个域名。再根据这个域名进行一次正向查询。
如果正常,则第1步得到的IP地址应该在正向查询得到列表上。否则,就是有人在提供伪造的反向查询信息。

4、总结

DNS用于在文字名称和底层通信的IP地址之间转换。

标准(正向)查询把文字翻译成数字类型的IP地址。

反向查询把IP地址翻译成主机名。