传输模型,网络层次划分,三次握手,四次挥手,IP与端口,套接字socket

了解套接字之前,需要先了解基本的传输模型

其次,还需要了解网络的七层划分和四层结构

在python中,数据链路层相当于硬件层,python不需要了解,只用在传输层进行学习就足够了

其中,传输层分为TCP传输协议和UDP协议,TCP协议相当于打电话,是可靠传输,但是UDP的传输是不可靠的,就像发短信,

当短信发出,可能会出现时间的混乱,可能会出现发送失败的情况,是不可靠的。

需要提前明白的是:

  作为python开发,都是在应用层的HTTP之上进行开发的,而HTTP协议是基于TCP协议之上的

  python网络编程,其最底层,就在传输层,再往下,python是做不了的


还需要了解的,关于TCP的连接

  建立连接(三次握手)

  数据传输

  断开连接(四次挥手)

1. 建立连接(三次握手)

客户端向服务器发起请求连接的包(一次),当服务器接收的请求,就会返回一个同意连接的包(第二次),

在客户端就会建立连接,然后向服务器发送已经建立连接的信息(三次),服务器收到客户端成功连接的信息,

就会正式开始连接

第三次是为了确认,假设如果客户端网络不好,第一次请求由于网络延时,由于长时间的等待

客户发起了第二次请求,完成了三次握手后,第一次请求连接的包发送到了服务器,服务器向客户端发起同意连接,

但是并没有收到客户端的成功连接信息,服务器就不会建立连接,从而达到网资源的不浪费】

2. 数据传输

数据的传输,客户端发起请求,服务器发起响应,完全按照一发一收,一收一发

3.断开连接(四次挥手)

客户端向服务器发起完成(出动关闭)请求(第一次),服务器收到请求返回同意请求(第二次),但此时并没有完全关闭,还会有一段等待的时间,

服务器会在会这短时间将未传输完成的数据传输完毕,当完成全部传输,就会向客户端发起关闭请求(第三次),客户端收到以后,会返回确认信息(第四次),

这时服务器就会关闭,客户端会也会等待一段时间,然后关闭。

【第四次还是为了确认】


通信定位的流程

1. 先找IP

IP地址确定用户,127.0.0.1表示本地IP,0.0.0.0表示任意访问    最大到255.255.255.255

2. 再找端口

端口从0到65535,0~1023都是一些专有特殊端口,不能使用。1024~65535之间的是动态端口,可以随意使用(也有特殊的)。

其中,一些特殊的,比如80表示HTTP,22表示ssh,21FTP,3306表示Mysql,6379表示redis,27017表示MongoDB


 最后学会使用套接字socket创建服务器和客服端

创建一个服务器端口

 1 import socket
 2 server = socket.socket()
 3 server.bind(("", 9999))    # 元组
 4 server.listen(3)    # python3.6以后才支持的监听最大量操作
 5 conn,addr = server.accept() # 取conn建立对等连接
 6 while True:
 7     data = conn.recv(1024)
 8     if not data:
 9         break
10     print(data.decode())
11     conn.send(data)    #原数据返回
12 conn.close()
13 server.close()    #关闭

建立一个客户端:

import socket
client = socket.socket()
client.connect(('127.0.0.1', 9999))    #本地IP
while True:
    data = bytes(input('>>>'), encoding='utf-8')
    if not data:
        break
    client.send(data)    # 发送消息
    re_data = client.recv(1024)
    print('回执消息:', re_data)
client.close()

先运行服务器,再运行客户端,就可以向服务器发送信息,并接收到服务器回执的相同的消息

原文地址:https://www.cnblogs.com/pywjh/p/9450778.html