OSI七层协议补充与socket套节字
OSI七层协议补充与socket套节字
一、传输层之TCP与UDP协议
TCP与UDP协议都是用来规定通信方式的,数据传输过程中能够遵循的协议有很多其中TCP协议和UDP协议是较为常见的两个。
1.TCP协议
可靠传输,只要得不到认可,就重新发送数据报,直到得到对方的确认为止
1.三次握手建连接:
建立双向通道
问题:洪水攻击
解决的办法:同时让大量的客户端朝服务端发送建立TCP连接的请求

2.四次挥手
断开双向通道(中间的两步不能合并,需要有检查的时间)
注意:基于TCP协议传输的数据非常安全,因为有双向通道,基于TCP传输数据,数据不容易丢失,原因在于二次确认机制,每次发送数据都需要返回确认消息,否则在一定时间会反复发送。达到一定次数的发送,若得不到确认则删除数据。

三次握手和四次挥手也可以看成是小情侣谈恋爱的过程
三次握手:表白在一起
四次挥手:决裂要分手
# 基于TCP传输数据因为有双向通道所以很安全
TCP传数据不容易丢失因为有二次确认机制,每次发送数据都需要返回确认消息,否则在一定时间会反复发送
2.UDP协议
UDP协议发送数据没有任何的通道也没有任何的限制,但是没有TCP协议传输数据来的安全(没有二次确认机制)
eg:发了消息,重要的是发了,不管别人看了没有,回没有回复
二、应用层
应用层提供各种各样的应用层协议,这些协议嵌入我们使用的各种应用程序中,主要是程序员自己采用什么样的策略和协议
常见的协议有:HTTP,HTTPS,FTP....
三、socket套节字编程
1.套节字的作用
可以看成两个网络应用程序进行通信时,各自通信连接中的端点
2.套节字家族
基于文件类型的套节字家族
套节字家族的名字:AF_UNIX
基于网络类型的套节字家族
套节字家族的名字:AF_INET
3.socket代码简介
'''客户端'''
import socket
# 1.生成socket对象指定类型和协议
client = socket.socket()
# 2.通过地址链接服务端
client.connect(('127.0.0.1',8080))
# 3.直接给服务端发送消息
client.send('你好,我是客户端,你是谁'.encode('utf8'))
# 4.接收服务端发送过来的消息 1024是字节数
data = client.recv(1024)
print(data.decode('utf8'))
# 5.断开与服务端的链接
client.close()
'''服务端'''
import socket
# 1.产生一个socket对象并指定采用的通信版本和协议(TCP)
server = socket.socket()
# 2.绑定一个固定的地址(服务端必备的条件)
server.bind(('127.0.0.1',8080))
# 3.设立半连接池
server.listen(5)
# 4.等待连接
sock,addr = server.accept()
print(sock,addr)
# 5.服务
data = sock.recv(1024)
print(data.decode('utf8'))
sock.send('我是服务端,专门为您服务的'.encode('utf8'))
# 6.关闭双向通道
sock.close()
# 7.关闭服务端
server.close()

4.代码优化
'''优化客户端'''
import socket
# 1.生成socket对象指定类型和协议
client = socket.socket()
# 2.通过地址链接服务端
client.connect(('127.0.0.1',8081))
while True:
msg = input('请输入您想要发给服务端的消息>>>').strip()
if len(msg) == 0:
print('不能发送空消息哦')
continue
# 3.直接给服务端发送消息
client.send(msg.encode('utf8'))
# 4.接收服务端发送过来的消息 1024是字节数
data = client.recv(1024)
print('来自服务端的消息>>>>',data.decode('utf8'))
# # 5.断开与服务端的链接
# client.close()
'''优化服务端'''
import socket
# 1.产生一个socket对象并指定采用的通信版本和协议(TCP)
server = socket.socket()
# 2.绑定一个固定的地址(服务端必备的条件)
server.bind(('127.0.0.1',8081))
# 3.设立半连接池
server.listen(5)
while True:
# 4.等待连接
sock,addr = server.accept()
while True:
try:
# 5.服务
data = sock.recv(1024)
if len(data) == 0:
break
print(f'来自于客户端{addr}的消息>>>>',data.decode('utf8'))
msg = input('请输入发送给客户端的消息(不能发空消息)>>>:').strip()
sock.send(msg.encode('utf8'))
except BaseException:
break
四、半连接池
当服务器在响应了客户端的第一次请求后会进入多待状态,半连接池其实就是一个容器,系统会自动将半连接放入这个容器中,可以避免连接过多
eg:server.listen(5)
OSI七层协议补充与socket套节字的更多相关文章
- Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver
今日内容:socket网络编程 1.OSI七层协议 2.基于tcp协议的套接字通信 3.模拟ssh远程执行命令 4.tcp的粘包问题及解决方案 5.基于udp协议的套接字 ...
- 8.6 day27 网络编程 osi七层协议 Time模块补充知识 TCP协议
Time模块补充知识 date和datetime区别是什么? date 就是年月日 datetime就是年月时时分秒 以下代码为什么会报错? import json from datetime imp ...
- 开发架构+osi七层协议+socket(day26)
目录 软件开发架构 C/S架构 B/S架构 网络编程 互联网协议/OSI七层协议 传输层 网络层 数据链路层 物理连接层 socket 什么是socket 为什么用socket 如何使用 软件开发架构 ...
- 网络编程之网络架构及其演变过程、互联网与互联网的组成、OSI七层协议、socket抽象层
目录 网络架构及其演变过程 单机架构 CS架构 BS架构 BS架构和CS架构的区别 C/S架构的优缺点: B/S架构的优缺点: 互联网与互联网的组成 互联网的组成(教科书版) 互联网的组成(科普版) ...
- 网络编程之OSI七层协议略析
OSI七层协议 1 物理连接层 用高低电平模拟二进制数01012 数据链路层 以太网协议,Ethernet,要求连入网络的计算机必要要有一块网卡,并且规定全球每一块网卡的mac 地址都不一样,用12位 ...
- 网络框架,互联网的组成,OSI七层协议,抽象层
6.25自我总结 1.网络框架 1.单机 单机游戏 以下两个基于网络的 2.CS架构 cs--->client客户/server服务 服务端(应用程序)一个就够了,客户端(应用程序)可以有多个 ...
- 网络编程网络协议篇(osi七层协议)
一 互联网的本质 咱们先不说互联网是如何通信的(发送数据,文件等),先用一个经典的例子,给大家说明什么是互联网通信. 现在追溯到八九十年代,当时电话刚刚兴起,还没有手机的概念,只是有线电话,那么此时你 ...
- day28——C/S与B/S架构、网络通信原理、osi七层协议、UDP、TCP协议、TCP的三次握手与四次挥手
day28 C/S B/S架构 C:client 客户端 B:browse浏览器 S:server 服务端 C/S C/S架构:基于客户端与服务端之间的通信 QQ.游戏.皮皮虾 优点:个性化设 ...
- 大话OSI七层协议
大白话OSI七层协议 互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层.实际上这个七层是不存在的.没有这七层的概念,只是人为的划分而已.区 ...
- day30 OSI七层协议
网络编程 什么是网络编程? 网络编程就是编写基于网络传输数据的应用程序 为什么需要网络编程? 在我们以前的编程中,所有的数据都是存在于本地,且只能由我们自己使用,不能进行跨电脑通讯,但是在实际的生活中 ...
随机推荐
- Python基础之模块:1、模块的导入和使用
目录 一.模块 1.简介 2.模块的表现形式 二.模块的分类 1.自定义模块 2.内置模块 3.第三方模块 三.导入模块的句式 学前须知: 1.import句式 2.from...import...句 ...
- AGC007C Pushing Balls —— 期望的神题
Problem Link 题意: 序列上按顺序交错有 \(n\) 个球和 \(n+1\) 个洞,即 \(hole_1,ball_1,hole_2,ball_2,\dots,ball_n,hole_{n ...
- 计算机系统大作业:Hello的一生
计算机系统大作业 题 目 程序人生-Hello's P2P 专 业 计算机科学与技术 学 号 班 级 学 生 江水为竭 指导教师 刘宏伟 计算机科学与技术学院 2022年5月 摘 要 HelloWor ...
- day02-实现01
实现01 1.实现任务阶段1 编写mytomcat,该服务器能给浏览器返回"你好,我是服务器!"的简单信息. 根据之前的tomcat框架整体分析,我们将浏览器发送请求,tomcat ...
- 前端面试HTML和CSS总结,这一篇就够了!
一,面试基础 HTML和CSS ps:这俩面试答不上来的,基本就可以回去了,以下是HTML题,一般来说这地方不会出太多题,面试官也不愿意花太多时间在这上面. 1,HTML语义化,如何理解语义化? 让人 ...
- fbterm的配置,纯文本终端显示中文
安装 fbterm sudo apt-get install fbterm 设置普通用户可以执行 fbterm 命令 sudo adduser username video #username为用户名 ...
- 关于最新版本listen1 (2.1.6)的修改心得(添加下载功能)
注:本文只作为技术交流 前言 再次感谢 listen1 的作者开发出如此强大的音乐播放器 项目地址 上一篇的文章没有解决跨域问题(命名不能正确命名), 上一篇文章 地址 这次解决了,并简单的美化了下载 ...
- MySQL进阶实战5,为什么查询速度会慢
一.先了解一下MySQL查询的执行过程 MySQL在查询时,它是由很多子任务组成的,每个子任务都会消耗一定的时间,如果要想优化查询,实际上要优化其子任务,可以消除一些子任务.减少子任务的执行次数.让子 ...
- 【Shell案例】【小数点scale&bc】14、求平均值
描述写一个bash脚本以实现一个需求,求输入的一个的数组的平均值 第1行为输入的数组长度N第2~N行为数组的元素,如以下为:数组长度为4,数组元素为1 2 9 8示例:41298 那么平均值为:5.0 ...
- JavaEE Day00 Java Web课程介绍
1.什么是Java Web? 使用Java语言开发互联网项目,简单理解为使用Java语言开发网站 2.课程介绍:30天 1.数据库(5天,第一阶段) 2.静态网页前端(5天,第二阶段) 3.Web核心 ...