io操作-网络

Posted chenlulu1122

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了io操作-网络相关的知识,希望对你有一定的参考价值。

网络模型
7层模型:
应用层 提供具体功能
表示层 压缩优化加密数据
回话层 选择传输服务
传输层 提供传输服务
网络层 路由选择,网络互联
链路层 数据转换,发送
物理层 提供硬件实体设备
tcp/ip 四层模型
应用
传输
网络
物理

ifconfig 查看ip地址


###传输服务

tcp 文件/网页/邮件
面向连接的传输服务
可靠,数据无丢失/错乱/重复
先连接,发送数据,断开连接

三次握手:
主动方发报文请求建立连接
被动方收到报文后,回报文允许连接
主动方收到报文后,再次发报文建立连接

四次挥手:
主动方发送报文请求断开
被动方收到信息后,回报文准备断开
被动方回报文,可以断开
主动方回报文断开连接

udp 视频聊天,群聊,广播
面向无连接的传输服务
不可靠,数据丢失


tcp socket

服务端:
from socket import *

s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, True)#断开立刻重新使用
s.bind((‘0.0.0.0‘, 8888))#bind()里面是ip port 组成的元组ip 字符串类型 port 整型
s.listen(5)
c, addr = s.accept()
data = c.recv(1024)
c.send(data) #接收发送消息都是字节串:字节/字符转换str - encode() - tybes - decode() - str
c.close()
s.close()

客户端:
from socket import *

s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, True)
s.connect((‘127.0.0.1‘,8888))
s.send(b‘ok‘)
s.recv(1024)
s.close()


udp socket

服务端:
from socket import *

s = socket(family=AF_INET, type=SOCK_DGRAM)
s.bind((‘127.0.0.1‘, 8888))
data, addr = s.recvfrom(1024)
s.sendto(data, addr)
s.close()

客户端:
s = socket(family=AF_INET, type=SOCK_DGRAM)
addr=(‘127.0.0.1‘, 8888)=
s.sendto(b‘ok‘, addr)
data, addr = s.recvfrom(1024)
s.close()

 

###tcp和udp区别
服务端和客户端的发送/接收配合使用
tcp字节流传输,发送速度大于接收速度,粘包

以上是关于io操作-网络的主要内容,如果未能解决你的问题,请参考以下文章

网络io模型总结

io操作-网络

从理解Linux操作系统的网络IO模型来理解NettyRedis...

Linux网络编程 IO操作

网络IO模型

操作系统常见面试题(网络IO模型篇)