10 传输模型与套接字(进阶)

Posted zcmq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10 传输模型与套接字(进阶)相关的知识,希望对你有一定的参考价值。

01-传输模型

第一部分 传输模型

1、基本模型

技术分享图片

技术分享图片

2、层次划分

MAC地址:唯一的地址

TCP可靠、UDP不可靠

技术分享图片

技术分享图片

3、传输层说明

说明一:

? 作为Python开发,咱们都是在应用层的HTTP协议之上进行开发的。

说明二:

网络编程,主要是了解我们Python能编写的最低的层次,即传输层的基本情况

说明三:

HTTP协议是基于TCP之上的,因此我们需要了解TCP连接的基本过程

第二部分 TCP连接

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

技术分享图片

为什么三次

因为第一次只是客户端告诉服务端

第二次,客户端才知道服务端收到了

第三次,服务端才知道客户端收到了

2、传输数据

技术分享图片

客户端向服务端请求

服务端向客户端响应

一发一收

一收一发

3、断开连接(四次握手)

技术分享图片

技术分享图片

为什么多了一次?

因为服务端可能还数据要发。

到底是一次连接传一次数据;还是一次连接传多次数据?

都可以:HTTP协议 前者、Websocket 后者

第三部分 IP地址与端口

1、IP地址

技术分享图片

技术分享图片

127.0.0.1 自己

0.0.0.0 任意访问

2、端口号

技术分享图片

技术分享图片

端口是用来区分我们的应用程序的,范围:0-65535

02-套接字

第一部分 创建套接字

1、套接字的基本概念

技术分享图片

技术分享图片
2、创建套接字实例
>>> import socket
>>> sock = socket.socket()
>>> sock
<socket.socket fd=792,  # 文件描述符(唯一标识了一个socket)
family=AddressFamily.AF_INET,   # AF_INET表示IPv4
type=SocketKind.SOCK_STREAM,    # SOCK_STREAM表示TCP
proto=0>    # 通常都是0
3、三种套接字

技术分享图片

技术分享图片

第二部分 建立套接字连接

1、服务端监听套接字的绑定与监听
>>> import socket
>>> server = socket.socket()    # 生成套接字     
>>> server.bind((0.0.0.0,8899))       # 绑定套接字,4个0为全网地址,可以不写
>>> server.listen(5)            # 监听套接字,5为监听数量
2、客户端套接字的主动连接
>>> import socket
>>> client = socket.socket()
>>> client.connect((127.0.0.1,8899))
3、服务端对等连接套接字的生成
>>> import socket
>>> server = socket.socket()
>>> server.bind((‘‘,8899))
>>> server.listen(5)
>>> conn,addr = server.accept()     # accept会阻塞
4、accept阻塞说明

技术分享图片

技术分享图片

第三部分 使用套接字传输

客户端 一发 一收

服务端 一收 一发

recv 会阻塞哟!

# 服务端
>>> import socket
>>> server = socket.socket()
>>> server.bind((‘‘,8899))
>>> server.listen(5)
>>> conn,addr = server.accept()
>>> conn.recv(1024)
bhello
>>> conn.send(bthanks)
6
?
# 客户端
>>> import socket
>>> client = socket.socket()
>>> client.connect((127.0.0.1,8899))
>>> client.send(bhello)
5
>>> client.recv(1024)
bthanks

第四部分 断开套接字连接

1、客户端主动断开连接
>>> import socket
>>> client = socket.socket()
>>> client.connect((127.0.0.1,8899))
>>> client.send(bhello)
5
>>> client.recv(1024)
bthanks
>>> client.close()  # 断开连接
2、服务端判断客户端断开连接
>>> import socket
>>> server = socket.socket()
>>> server.bind((‘‘,8899))
>>> server.listen(5)
>>> conn,addr = server.accept()
>>> conn.recv(1024)
bhello
>>> conn.send(bthanks)
6
>>> conn.recv(1024)
b‘‘         # 接收到空字节,表示客户端已经断开连接
>>> conn.close()    # 断开连接

总结:九个操作

操作一: 服务器套接字:bind

操作二: 服务器套接字:listen

操作三: 客户端套接字:connect

操作四: 客户端套接字:send

操作五: 对等连接套接字:recv

操作六: 对等连接套接字:send

操作七: 客户端套接字:recv

操作八: 客户端套接字:close

操作九: 对等连接套接字:close

以上是关于10 传输模型与套接字(进阶)的主要内容,如果未能解决你的问题,请参考以下文章

进阶版socket套接字ftp文件传输可并发

Express框架进阶4---安全(转)

2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC多对多表三种创建方式前后端传输数据编码格式contentTypeajax自定义分页器)

如何将数据从一个片段传输到另一个片段android

网络编程:TCP/IP协议的三次握手与四次挥手

第九篇:网络编程补充与进程