网络通信协议
Posted q767498226
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络通信协议相关的知识,希望对你有一定的参考价值。
一.osi(open system interconnect)七层协议
1.应用层:最靠近用户的osi层,为用户的应用程序提供网络服务
2.表示层:可以确保一个系统的应用层所发的信息可以被另一个系统的应用层读取.数据转换
3.会话层:通过传输层建立数据传输的通路,主要在你的系统之间发起会话或者接收会话请求
4.传输层:定义了一些传输数据的协议和端口号(eg:tcp,udp),分段数据,然后接收数据并重组数据
5.网络层:不同地域的网络中两个主机系统之间提供连接和路径选择.
6.数据链路层:定义如何让格式化数据以进行传输,以及如何控制对物理介质的访问,这一层通常还提供错误检测和纠正,以确保数据的可靠传输.
7.物理层:主要定义物理设备的标准
二.tcp/ip五层模型
1.物理层:主要是基于电器特性发送高低电压(电信号)
2.数据链路层:第一电信号的分组方式
1.以太网协议:用来统一电信号的标准,一组电信号构成一个数据包,叫做帧.
每组数据帧分成:报头head和数据data两部分
2.mac地址:物理地址
3.广播:原始方式
3.网络层:引入一套新的地址用来区分不同的广播域/子网
1.ip协议:规定网络地址的协议叫ip协议
2.子网掩码:确定哪些地址在同一子网
3.ip数据包:ip数据包也有head和data,ip数据包在以太网包的data里
head:长度为20-60字节
data:最长为65516字节
4.ARP协议:通过ip地址获取mac地址
4.传输层:建立端口到端口的通道
1.tcp协议:定义为端口号拼接到ip地址构成套接字
tcp协议是可靠的字节流传输,tcp数据包没有长度限制,但是为了保证网络的效率,通常不会唱过ip数据包的长度,以确保单个tcp数据包不必再分割.
以太网头 | ip头 | tcp头 | 数据 |
tcp协议的三次握手和四次挥手(连接和断开过程)
2.udp协议:定义为端口号拼接到ip地址构成套接字
udp协议是不可靠的数据包传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
以太网头 | ip头 | udp头 | 数据 |
5.应用层:规定应用程序的数据格式
组包,拆包的过程
三.基于tcp和udp协议下的socket的通讯流程
1.tcp协议:可靠的,面向连接的协议(eg:打电话),传输效率低,全双工通信,面向字节流
import socket server = socket.socket() ip_port = ("127.0.0.1",8888) server.bind(ip_port) server.listen(1) while 1: conn ,addr = server.accept() while 1: from_client_msg = conn.recv(1024).decode("utf-8") print(from_client_msg) if from_client_msg == "bye": break to_client_msg = input("回复:").encode("utf-8") conn.send(to_client_msg) if to_client_msg == "bye": break conn.close()
import socket client = socket.socket() ip_port = ("127.0.0.1",8888) client.connect(ip_port) while 1: to_server_msg = input("发消息:") client.send(to_server_msg.encode("utf-8")) if to_server_msg == "bye": break from_server_msg = client.recv(1024).decode("utf-8") print(from_server_msg) if from_server_msg == "bye": break client.close()
2.udp协议:不可靠的,无连接的服务,传输效率高,一对一、一对多、多对一、多对多、面向报文(数据包),尽最大努力服务,无阻塞控制.
import socket client = socket.socket(type=socket.SOCK_DGRAM) ip_port = ("127.0.0.1",8888) while 1: to_server_msg = input("发送:").encode("utf-8") client.sendto(to_server_msg,ip_port) from_server_msg,server_addr = client.recvfrom(1024) print(from_server_msg.decode("utf-8"))
import socket server = socket.socket(type=socket.SOCK_DGRAM) ip_port = ("127.0.0.1",8888) server.bind(ip_port) while 1: conn,addr = server.recvfrom(1024) print(conn.decode("utf-8")) to_client_msg = input("回复:").encode("utf-8") server.sendto(to_client_msg,addr)
3.基于tcp和udp协议socket流程区别
TCP需要连接,而UDP不需要.
以上是关于网络通信协议的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装