先放程序源码以及Python例子
网络的基本知识
- 网络一般有7层模型
- 每一层网络从上至下分别将要发送的包进行封装,然后通过网线传输出去,解析的时候由下至上分别的进行解包。
- TCP建立可靠的连接;UDP仅仅是发送报文,不管是否丢包。
- IP地址。如果要与一个服务器进行通讯,需要服务器的ip地址,但若服务器主机在路由器的子网里面,则需要设置端口映射,让IP所在的路由器某个端口映射到服务器主机。
- 应用程序一般通过端口进行数据传输。端口是一个虚拟的概念,在实际物理层次不存在。端口分为三类:
- 公认端口:0-1023 绑定Binding一些特定服务
- 注册端口:1024-49151 一般应用程序使用绑定
- 动态或私有端口:49152-65535 应用程序一般不会主动使用
- 一个端口可以建立多个socket进行连接(服务器端一般是可以的)
- 目前的网络编程模型主要是 客户-服务器端结合(C/S)
Socket的基本知识
简单来说,socket 是对底层网络通信的一层抽象,让程序员可以像文件那样操作网络上发送和接收的数据。
在Linux哲学里面,一切皆文件。那么可以将Socket理解为一个文件,应用程序主要的功能就是从Socket(文件)中读取和写入数据。
http://www.bogotobogo.com/python/python_network_programming_server_client.php
socket 类型
创建 socket 的时候需要指定 socket 的类型,一般有三种:
-
SOCK_STREAM
:面向连接的稳定通信,底层是 TCP 协议,我们会一直使用这个。 -
SOCK_DGRAM
:无连接的通信,底层是 UDP 协议,需要上层的协议来保证可靠性。 -
SOCK_RAW
:更加灵活的数据控制,能让你指定 IP 头部
术语表
名称 | 含义 |
---|---|
socket | 创建一个通信的管道 |
bind | 把一个地址三元组绑定到 socket 上 |
listen | 准备接受某个 socket 的数据 |
accept | 等待连接到达 |
connect | 主动建立连接 |
send | 发送数据 |
receive | 接受数据 |
close | 关闭连接 |
Socket通讯流程图
Http 和 Https
待补充