- 网络通信中最重要的是网络通信协议。最常用的网络协议有3个:Microsoft的NetBEUI、Novell的IPX/SPX和TCP/IP协议。只有TCP/IP允许与Internet完全连接。
- IP地址是IP协议提供的一种统一的地址格式,他为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址上的差异。
IP地址是一个32位的二进制数,通常被分割为4个8位二进制数。IP地址通常用十进制表示成(a.b.c.d)的形式,其中,a、b、c、d都为0~255的十进制整数。 - 端口可分为虚拟端口和物理端口,其中虚拟端口是指计算机内部或交换机路由器内的端口,物理端口又称接口。一个IP地址的端口最多可以有65536个。
- 子网掩码又称为网络掩码、地址掩码,不能单独存在,必须结合IP一起使用,将某个IP地址划分成网络地址和主机地址两部分。
- Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或应答网络请求。建立网络通信连接至少有一对端口号(Socket)。Socket本质是编程接口(API),是对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。套接字之间的连接可以分为3个步骤:服务器监听、客服端请求和连接确认。import socket; from socket import *
- UDP编程:UDP是OSI参考模型中一种无线连接的传输层协议,提供面向事物的简单不可靠信息传送服务。使用UDP协议时,不需要建立连接,只要知道对方的IP地址和端口号,就可以直接发送数据包。对于不要求可靠到达的数据,就可以使用UDP协议。
- UDP收发信息:使用recvfrom()方法从发送方接收信息然后使用sendto()方法把信息再发送到发送方。
- UDP广播:基于UDP协议传输的特点:通过地址发送消息,无须事先建立连接,可以实现广播的功能。可以使用UDP对象的setsockopt()方法实现发送广播消息。、
- TCP编程:TCP是一种面向连接的、可靠的、基于节流的传输层通信协议。创建TCP连接时,主动发起连接的称为客服端,被动响应连接的称为服务器。
- UDP使用type=SOCK_DGRAM参数,而TCP使用type=SOCK_STREAM参数,不过这是系统的默认值,可以省略。
- TCP服务端编程:
a. 端口绑定,若是属于本地地址,IP地址可以不写,使用TCP对象的bind()方法来实现。 b. 使用TCP对象的listen()方法进行监听,看是否有信息传送。 c. 使用TCP对象的accept()方法进行接收,返回客户端的端口号和IP地址。 d. 使用TCP对象的recv()方法接收数据。 e. 使用TCP对象的send()方法向客户端发送信息。 - TCP三次握手:第一次握手:建立连接时,客服端发送SYN包(SYN seq=x) 到服务器端,并进入SYN_SENT状态,等待服务器端确认;其中SYN表示同步序列编号。第二次握手:服务器端收到SYN包,必须确认客户端的SYN(ACK=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器端进入SYN_RECV状态。第三次握手:客户端收到服务器端的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),次包发送完毕,客户端和服务端进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
- TCP四次挥手
a. TCP客户端发送一个FIN,用来关闭客户端到服务器端的数据传送。 b. 服务器端收到这个FIN,它发回一个ACK,确认序号为收到的序号加1.与SYN一样,一个FIN将占用一个序号。 c. 服务器端关闭与客户端的连接,发送一个FIN给客户端。 d. 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。 - TCP10种状态
a. CLOSED b. LISTEN c. SYN_SENT d. SYN_RCVD e. ESTABLISHED d. FIN_WAIT_1 f. FIN_WAIT_2 g. TIME_WAIT h. CLOSE_WAIT i. LAST_ACK - TCP长连接和短连接
参考书籍:《Python 3.x基础教程》
|