码迷,mamicode.com
首页 > 其他好文 > 详细

网络通信协议

时间:2019-01-03 23:35:48      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:input   tcp协议   socket   这一   网络服务   type   拼接   数据帧   子网   

一.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不需要.

网络通信协议

标签:input   tcp协议   socket   这一   网络服务   type   拼接   数据帧   子网   

原文地址:https://www.cnblogs.com/q767498226/p/10217505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!