OSI七层协议&TCP协议(三次握手四次挥手)
今日内容
- python 基础回顾
- 软件开发架构
- 网络理论前戏
- OSI 七层协议(五层)
- TCP协议
- 三次握手与四次挥手
- UDP协议
内容详细
一、python 基础回顾
1、基本数据类型
整型 int
浮点型 float
字符串 str
列表 list
字典 dict
元组 tuple
集合 set
布尔值 bool
2、字符编码意义与分类
意义:
内部记录人类字符和数字对应关系的数据
分类:
ASCII码
GBK码
shift_JIS码
Eur_kr码
unicode(万国码)
utf8(万国码的优化版本)
现在默认使用的编码是utf8
3、函数
类似工具,提前定义好之后就可以反复使用
4、对象、类、父类
对象
对象是数据与功能的结合体
'''对象必须要由类产生!!!'''
类
类:一系列对象相似的特征与相似的技能的结合体
类的三大特性:
封装、继承、多态
继承重点掌握
# 继承案例:
把对象存放json成格式文件
import json
from datetime import date, datetime
class MyJsonClass(json.JSONEncoder):
def default(self, o):
# 判断o是否符合序列化类型,不符合则把对象中的datetime方法格式化输出成字符串保存
if isinstance(o, datetime):
return o.strftime('%Y-%m-%d %X')
elif isinstance(o, date):
return o.strftime('%Y-%m-%d')
return o.super().default(o)
# 定义一个字典,它的v值是个对象
d = {'time1': datetime.today(), 'time2': date.today()}
# 把字典转换成json格式
res = json.dumps(d, cls=MyJsonClass)
print(res)
# 打印会报错,因为json不支持对象的格式转换,需要把对象的内容转换成字符串
# print(res)
# TypeError: Object of type 'datetime' is not JSON serializable
# 把对象内容转换成字符串:
# 方法一:人工只智能转换 str()
# 方法二:利用继承特性,自定义json的类,继承json原有类,重定义default方法,转化字符串
会查看源码:
父类
父类 : 结合子类相似的数据和功能,子类可以继承父类并使用父类中的属性与方法
二、软件开发架构
1、C/S 架构
c/s架构
c:client 客户端
s:server 服务端
"""
将客户端看成是去店里消费客人
将服务端看成是提供服务的店面
eg:收集各种app其实就是各大软件的客户端
服务端需要具备的三大特征
1.24小时不间断提供服务(24小时监听)
2.固定的地址(IP地址)
3.能够服务多个用户(高并发)
"""
2、B/S 架构
b/s架构
b:browser 浏览器
s:server 服务器
"""
浏览器统一充当各个服务端的客户端
本质:bs架构本质上也是cs架构
"""
统一:各大互联网巨头正在做的事情
eg:
微信小程序(微信提供开发微信小程序的软件)
支付宝小程序(各大程序接口)
# 总结
网络编程学习完就可以开发cs架构的软件(简易版本)
并发编程、前端、数据库、后端框架就可以开发bs架构软件(任何类型的软件)
三、网络编程前戏
网络编程其实研究的是程序之间的数据通信
由来:
基于远程传输数据的技术最早诞生于美国军方(前沿技术通常都是由军事产生)
远程数据传输发展史(民用)
1.有线电话 电话线互联
2.无线电话 信号发射器
3.大屁股电脑 网线
4.笔记本电脑 网卡
...
"""
要想实现远程数据交互的前提是必须要有物理连接介质
"""
除了有物理连接介质之外还应该有一些能够保证数据彼此无障碍交互的东西(标准)
OSI七层协议
四、OSI 七层协议
知识储备
交换机:能够使接入该机器的所有计算机之间彼此互联
局域网:由交换机和接入该交换机的所有计算机组成的网络
互联网:简单理解为多个局域网之间彼此互联
'''
基于mac地址的数据传输
1、广播风暴
2、mac地址不能跨局域网传输
'''
路由器:能够连接多个局域网并实现局域网之间的数据传输
1、七层协议
应用层
表示层
会话层
传输层 端口号(定位计算机中的的软件)
网络层 IP协议(互联网)
数据链路层 以太网协议、mac地址(作用在局域网中)
物理层
# 开发的五层协议
应用层
传输层
网络层
数据链路层
物理层
2、物理层
提供一个物理连接接口(网线口 无线网卡)
3、数据链路层
1、规定电信号的分组方式
2、以太网协议
规定计算机必须有一块网卡,并且网卡上要有固定的一串数字(12位十六进制的数字)
12位十六进制数
前六位:产商编号
后六位:流水线号
上述数字也被称为计算机的'mac地址'(用于定位局域网内计算机地址)
4、网络层
IP 协议
IP协议:
规定了接入互联网的计算机都必须有一个IP地址用于唯一标识
IPv4:
最小 0.0.0.0
最大 255.255.255.255
然而近些年来IPv4的地址逐渐不够用
IPv6:
能够表示出地球上的每一粒沙子
# IP地址能够标识接入互联网的一台独一无二的计算机
公网IP和私网IP
公网IP需要花钱购买并申请
私网IP是自带的,但无法基于互联网访问(192.168 开头的)
# arp协议
将IP地址转换成mac地址(基于网络请求)
5、传输层
端口协议
端口号:
'''能够唯一标识一台计算机上正在运行的一款应用程序'''
范围: 0~65535
特性: 动态分配
eg: 第一次运行微信,系统随机取一个端口号2022
然后关闭微信重新启动,系统再随机取一个端口号
端口号的基本使用:
0~1024 系统默认需要使用的端口号
1024~8000 常见软件端口号
以后自己开发的软件最后使用8000之后的端口号
'''
端口号在同一台计算机同一个时刻不可以重复
'''
总结:
ip+port 172.16.1.5:8080
'''
ip地址 + 端口号 能唯一标识世界上某一台接入互联网的计算机上某一个正在运行的应用程序
'''
TCP 协议
流式协议 可靠协议
三次握手 建立链接
重要状态
listen监听态:等待对方发请求
syn_rcvd态:忙于恢复确认建立请求
# 洪水攻击:服务端在同一时间接收到了大量的要求建立链接的请求
四次挥手 断开链接
不能合并成三次
又有可靠协议、流式协议之称
# 可靠协议:
TCP协议有反馈机制,当发送方传输一段数据给接收端后,接收端需要反馈信息(我收到了)给发送方,发送方才会继续传输剩下的数据,如果不回馈,发送方会在规定时间内间隔传输,都没有反馈信息则停止传输
# 流式协议:
传输数据是一边传一边存的形式,不是一次性传完
# 三次握手 建立连接通道
客户端与服务端要建立的传输数据通道都是单向的
每建立一个通道都需要发送方发送建立请求,接收方同意请求,才能建立成功(syn=x、ack=x+1)
每次发送建立连接请求称为 一次握手
在第一次建立通道,服务端返回同意建立连接的信号时,可以同时发起建立服务端到客户端的连接请求,两次握手合并在了一起,所以三次握手就可以建立两条相互通信的连接通道
# 四次挥手 断开连接通道
断开链接通道也需要一方发起断开请求,另一端同意才能断开
每次发送断开链接请求也成为 一次挥手
在断开之前,服务器方会有一段真空期,确保全部数据已经全部传输完成了才会请求断开
UDP 协议
不可靠协议
数据发送没有通道的概念,发送出去之后就不管了
'''
TCP协议相当于打电话 你一句我一句 你侬我侬
UDP协议相当于发短信 发了就完事 管你看不看
'''
早期的QQ使用的就是UDP
UDP虽然是不可靠协议,但是可以在后期通过各种脚本弥补它的缺点
OSI七层协议&TCP协议(三次握手四次挥手)的更多相关文章
- 在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP
如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...
- [na]TCP的三次握手四次挥手/SYN泛洪
1.TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认序号:Ack序号,占32位, ...
- 01:osi七层---基于TCP协议的套接字(socket)
1 : osi 七层,tcp/ip 五层 1 cs架构和bs架构2 互联网3 osi七层 tcp/ip五层 -物理层 -网线.光纤 -数据链路层 -网卡 - ...
- 救救孩子吧,到现在还搞不懂TCP的三次握手四次挥手
本文在个人技术博客同步发布,详情可用力戳 亦可扫描屏幕右侧二维码关注个人公众号,公众号内有个人联系方式,等你来撩... 前几天发了一个朋友圈,发现暗恋已久的女生给我点了个赞,于是我当晚辗转反侧.彻 ...
- TCP/IP三次握手四次挥手
本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图所示,给出了TCP通信过程的示意图. TCP 三次握手四次挥手 主要包括三部 ...
- python TCP协议详解 三次握手四次挥手和11种状态
11种状态解析 LISTEN -------------------- 等待从任何远端TCP 和端口的连接请求. SYN_SENT --------------- 发送完一个连接请求后等待一个 ...
- 通俗了解TCP/IP三次握手四次挥手
前言: tcp/ip通信机制是计算机中很重要的一个知识点,不是一句两句就能解释清楚的,需要反复推敲其中的玄妙. 通俗理解: 但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?我 ...
- 详解 TCP的三次握手四次挥手
本文转载来自https://blog.csdn.net/qzcsu/article/details/72861891 背景描述 通过上一篇中网络模型中的IP层的介绍,我们知道网络层,可以实现两个主机之 ...
- TCP的三次握手四次挥手理解及面试题
一.TCP概述 每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字, 例如,若IP地址为192.0.0.1 而端口号为8000,那么得到 ...
- 网络基础二 tcp/ip协议簇 端口 三次握手 四次挥手 11种状态集
第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...
随机推荐
- centos7-collabora-office(在线文档编辑)
1.wget https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7/repodata/repomd.xml.key &a ...
- centos7 系统正则符号
点符号 . 匹配任意一个字符,且只有一个字符 星符号 * 匹配任意0和或多个以上连续的字符 扩展符号 括号符号[] 匹配括号出现的字符信息 [^abc] --表示排除含有abc字符的内容,是单个字符a ...
- mysql按照时间分组查询
mysql 按年.月.周.日分组查询 1.按照年份分组查询 SELECT DATE_FORMAT(t.bill_time,'%Y') month_time,sum(t.pay_price) total ...
- python2.7发送邮件失败之——代码问题
使用python2.7发送邮件,代码如下: from email.header import Headerfrom email.mime.text import MIMETextimport smtp ...
- 【笔记】thanos ruler组件
阅读官网文档后的笔记:https://thanos.io/tip/components/rule.md/ 感受 官网第一个话就强调风险,看来坑很多,能不用尽量不用 recording rule &am ...
- manjaro20默认关闭蓝牙
用于节电. https://gist.github.com/0xfe11/d0874b7d31cf649616fa9d816571ab3c 推荐执行 # Stop and disable the bl ...
- DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | TORCH.AUTOGRAD
torch.autograd 是PyTorch的自动微分引擎,用以推动神经网络训练.在本节,你将会对autograd如何帮助神经网络训练的概念有所理解. 背景 神经网络(NNs)是在输入数据上执行的嵌 ...
- JDK并发工具类
在JDK的并发包里提供了几个非常有用的并发工具类.CountDownLatch.CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程 ...
- gin框架中的参数验证
结构体验证 用gin框架的数据验证,可以不用解析数据,减少if else,会简洁许多. 处理请求方法 func structValidator(context *gin.Context) { var ...
- golang中的GOPATH使用和简单项目配置
GOPATH 是 Go 语言的工作目录,他的值可以是一个目录路径,也可以是多个目录路径,每个目录都代表 go 语言的一个工作区. 我们开发 Golang 项目时,需要依赖一些别的代码包,这些包的存放路 ...