12.1. 相关概念
OSI
七层模型:开放系统互连参考模型,包含物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
TCP/IP
:在OSI
七层模型的基础进行简化抽象出来的广泛使用的网络协议簇TCP协议
(传输控制协议):- 完成
OSI
模型中的第四层传输层指定的功能 - 有链接的,数据是安全的(有保障)
- 传输的速度相对较慢,三次握手、四次挥手、数据检查
- 完成
UDP
(用户数据报协议):- 无连接的,数据是不可靠的
- 传输速度相对较快
http
请求的结构及详细解释可以查看程序猿必须要了解的HTTP协议,今天总结了一份关于HTTP请求的结构与具体内容http
响应的结构及详细解释可以查看程序猿必须要了解的HTTP协议,总结了一份关于HTTP响应的结构及详细解释
12.2. TCP
编程
Socket
是网络编程的一个抽象概念。通常我们用一个Socket
表示打开了一个网络链接,而打开一个Socket
需要直到目标计算机的IP
地址和端口号,再指定协议类型即可。
TCP
是建立可靠连接,并且通信双方都可以以流的形式发送数据。
客户端:大多数连接都是可靠的
TCP
连接,创建TCP
连接时,主动发起连接的叫客户端。服务端:绑定一个端口并监听来自其他客户端的连接。如果某个客户端连接过来了,服务器就与该客户端建立Socket连接,随后的通信就靠这个Socket连接了。
skt = socket.soket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
:family
表示协议簇,socket.AF_INET
表示IPv4
,socket.AF_INET6
表示IPv6
;type
表示传输协议,socket.SOCK_STREAM
表示TCP
,socket.SOCK_DGRAM
表示UDP
skt.connect(address)
:向服务器发出请求,address
表示(主机/域名, 端口)的一个元组skt.send()
:发送请求报文,常见的内容b'GET / HTTP/1.1\r\nHost: www.baodu.com\r\nConnection: close\r\n\r\n'
skt.recv()
:接收服务器的数据,字节类型,需要decode
解码skt.bind()
:绑定主机和端口,接收一个元组类型的数据skt.listen()
:服务端监听服务skt.accept()
:服务端等待阻塞,一旦有客户请求数据,便创建新的套接字进行通讯,同时可以获取客户的请求地址skt.close()
:关闭套接字
使用
tcp
模拟客户端连接百度服务器
1 | # tcp-http模拟(tcp传输层, http应用层) |
使用tcp创建soket服务
1 | import socket |
使用tcp模拟客户端
1 | import socket |
12.3. UDP
编程
UDP
是面向无连接的协议,使用UDP
协议时,不需要建立连接,只需要知道对方的IP
地址和端口号,就可以直接发数据包。
skt.sendto()
:发送UDP
数据skt.bind()
:绑定主机和端口skt.recvfrom()
:接收UDP
数据skt.close()
:关闭Socket
连接
采用
UDP
模拟飞秋发送消息
1 | import socket |
UDP
协议创建服务端
1 | import socket |
UDP
协议创建客户端
1 | import socket |
- 本文作者: Lajos
- 本文链接: https://www.lajos.top/2020/05/12/No-12-Python语言基础-网络编程/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!