IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络基础概念 -> 正文阅读

[网络协议]计算机网络基础概念


Http和tcp的长短连接?

IP协议的目的是网络间寻址和进行确定路由,下一跳等。TCP协议的目的是为了实现端到端的可靠连接,至于如何查找到一条端到端的路径,则交给IP协议及其更下层的协议通过路由,寻址,广播等手段实现。

TCP创建和销毁需要三次握手和四次挥手,使用短连接需要频繁创建和销毁连接,使用长连接可以减少服务器和客户端的开销,一次创建,设定有效时间,在该时间段内维持该连接就可以一直通过该连接发送数据包。tcp长连接中客户端会定时向服务端发送数据包(心跳)表明当前客户端处于活跃状态。

HTTP是无状态的,HTTP1.0默认短连接,无状态的意思就是服务端和客户端不会存储当前事务的上下文信息,也不知道彼此之间的状态,因此每打开一个网页对服务端来说客户端的状态都是全新的,实现服务端和客户端交互必须知道彼此通信的上下文信息,状态,发过什么数据,可以通过session和cookie实现。短连接是每次通信结束后就关闭连接,HTTP现在支持长连接,需要在请求头中添加connection:keep-alive即可,但HTTP长连接的本质还是TCP长连接,keep-alive会通过浏览器告诉传输层,在发送完http请求后不要关闭tcp连接,保持当前连接可用,后续的http请求就通过这个连接进行传输。以此来实现http的长连接。keep-alive有一个保持时间,可以再服务器中设定。

应用场景:数据库连接可以使用长连接,特点是读写频繁,连接数有限。web服务使用短连接,读写不如数据库频繁,但连接数巨大,若使用长连接将占用大量资源,因此适合短连接。

三次握手

第一次握手:客户端发送两个东西:SYN=1 和一个随机序列号seq=x , 进入sent状态
第二次握手:服务端发送四个东西:SYN=1,一个回应一次握手的序列号 ack = x+1 ,ACK=1,一个随机序列号seq=y, 进入receive状态
第三次握手:客户端发送两个东西:回应二次握手序列号的 ack=y+1,ACK=1,进入establish状态

从结果来看,三次握手的意义如下:
第一次握手:
客户端能够确认:什么都确认不了。服务端确认:自己:接收正常,对方:发送正常
第二次握手:
客户端能够确认:自己:发送正常,接收正常,对方:发送正常,接收正常。服务端确认:自己:接收正常,对方:发送正常
第三次握手:
客户端能够确认:自己:发送正常。接收正常,对方:发送正常,接收正常。服务端确认:自己:接收正常,发送正常,对方:接收正常,发送正常
至此,服务端和客户端都确认彼此发送,接收正常,保证连接可靠。

为什么不能两次握手?
从服务端视角来看,发送完第二次握手包之后,只能确认自己能正常接收包且对方能正常发送,如果没有第三次握手客户端并不知道对方有没有收到自己的包,也就不能判断自己的发送和对方的接收是否正常。也就无法建立可靠连接。
例:第一次握手的包由于延迟过了很久才到server,但此时client重发的包已到达server并完成了连接,并关闭了连接,而server以为client又重新发了请求连接的包,由于只有两次握手所以server直接建立连接并等待客户端请求,但实际上客户端已经关闭,导致server资源被白白浪费。

可以四次握手吗?
可以,把第二次握手的SYN=1和seq=y作为一个包,ACK=1和ack=x+1作为一个包,但为了优化目的合并了。

server进入close状态之后,client向服务端发送数据,服务端会用RST包应答。

四次挥手

TCP是双工通信,server可以发送并接收数据,client可以发送并接受数据。

第一次挥手:客户端发送FIN=1和seq=x 进入FINwait状态
第二次挥手:服务端发送ACK=1和seq=x+! 进入 CLOSEwait
第三次挥手:服务端发送FIN=1和seq=y 进入LASTack
第四次挥手:客户端收到三次握手请求后进入TIMEwait态,发送ACK=1和seq=y+1 包,客户端等待2*报文段最长寿命后进入CLOSE态

为什么不能像三次握手一样变成三次挥手?
因为服务端在收到client终止连接请求之后可能还有一些数据没发完,先发ack表示收到断开请求。CLOSEwait状态的意义是等待server端发送完所有数据。

为什么要等待2*报文段最长寿命?
因为四次握手的ack包可能丢失,在这段时间里接收被服务端重发的FIN报文。

TCP流量控制如何实现

控制流量,防止发送方速率太快,使接收方缓存区不够导致溢出。使用滑动窗口协议实现,窗口是一段连续的待发送的字节序列,序列的范围是窗口的大小,接收方根据自己的资源情况,通过ACK告知发送可以收的窗口大小,发送发根据这个大小确定自己的发送速率,发送的速率是滑动窗口和拥塞窗口中的较小值。发送方在收到接收方的ACK包后,将窗口右移发送新的数据。

TCP的拥塞控制是怎么实现的?

拥塞控制包括四种算法:慢启动,拥塞避免,快重传,快恢复

慢启动:初始时将拥塞窗口大小置为一个最大报文段MSS的大小,每个传播轮次拥塞窗口的大小呈指数增长,为什么是指数增长?因为在一个传播轮次中,每收到一个确认报文后拥塞窗口大小就加一个MSS,假设一个传播轮次中发了4包,收到4个确认包,则此时需要将窗口大小加4,变成8,下一个传博轮次中,发送8个包,收到8个确认包,需要将窗口大小加8,变成16,不断加倍。

拥塞避免:拥塞窗口大小达到慢开始门限时,执行拥塞避免算法,每个传播轮次窗口大小不再加倍,而是加一MSS,窗口大小呈线性增长。

快重传:接收方收到一个失序报文段之后立刻发出重复确认,不要等到发送数据时捎带确认,当发送方连续三次收到重复确认后,立即重发缺失报文段,不必等待重传计时器到期。

快恢复:发送方收到三个确认重传包后,把慢门限减半,然后执行拥塞避免算法,让每个轮次的拥塞窗口继续线性增长。

TCP如何最大利用带宽?

TCP速率受三个因素影响:发送方速率,接收方速率,链路能承载速率,木桶原理,整体速率取决于三者中最小的那个。
1.窗口大小(发送&接收方决定),个人理解就是决定每一次传输能发送多少数据。
2.带宽(链路决定):指单位时间端到端的最高速率,由硬件决定,是一条路径中最慢的两个节点之间的带宽决定
3.RTT(链路决定),数据报文一去一回需要的时间,根据RTT得到RTO,若在RTO内没有收到ACK则重传,一般RTO>RTT,个人理解就是发送数据的频率

因此可以看出,距离越短,则RTT越短,发送数据频率越快,速率越高。窗口越大,则每个轮次发送的数据越多,速率越高,同时物理带宽越大,链路越通畅速率自然越高。

TCP与DP的区别

面向连接和无连接:在通信前一个需要建立连接,一个不需要

可靠和不可靠:一个需要确认收到的数据包,校验数据包顺序,未收到则需要重传,一个不需要

TCP只能一对一,UDP可以一对多,多对多

TCP面向字节流(一个包可以拆成若干分组,发送时以字节为单位),UDP面向报文流(报文只能一次发完)

另外TCP有拥塞机制,UDP没有,UDP发送速率不因网络拥塞而降低。TCP首部开销比UDP大。

实时性要求高的选UDP(游戏,视频,直播),否则选TCP(HTTP需要可靠的协议,使用TCP)

TCP如何保证传输的可靠性

数据包校验,失序(数据包)重拍,丢弃重复(数据包),收到确认,超时重传,流量控制(确保接收发送方的缓存区不溢出)

HTTP和HTTPS的区别

使用的端口不同
一个使用明文传输,一个运行在SSL层之上,将信息加密后传输,并添加网站身份认证
HTTPS加密解密会占用cpu内存开销

https连接过程:
客户端发送自己支持的协议,加密规则等
服务端发送自己的公钥,证书
客户端验证证书,如果无误则生成对称加密密钥,使用服务端公钥加密,再计算握手消息的摘要并发送
服务器验证握手摘要值,获取对称加密密钥,发送握手消息给对方
客户端解密并验证,然后使用对称加密密钥加密

可以看出,非对称加密的作用是传输握手过程中生成的对称加密的密钥,真正的信息使用对称加密密钥进行加密。使用HASH算法验证数据完整性

https如何避免中间人攻击?
客户端取得服务端证书后,会向权威证书管理机构验证证书的有效性,权威的认证根证书已经在操作系统内置。使用根证书向权威证书机构请求验证。

http跳转https:301代表永久跳转,302代表临时跳转

对称加密和非对称加密:
对称加密如DES,加密速度快,加密解密密钥相同,非对称加密安全性高,如RSA,公钥私钥不同。

数字签名:A使用md5对内容生成签名,并用私钥加密,B用公钥加密,取出内容用md5加密后与签名对比,一致则说明内容完整,并且私钥只有A有,所以一定来源于A,不可抵赖

socket套接字的理解

socket套接字是OSI模型中从上三层(应用,表示,会话)进入下四层(传输,网络,链路,物理)的入口,一般认为在网络相关的进程中,上三层构成了用户进程,负责处理应用层的具体细节,而下四层构成了操作系统的内核进程,负责处理通信相关的所有细节,操作系统提供用户进程到系统进程的隔离机制,用户进程需要接口才能调用系统进程,因此在从应用层进入传输层的时候构建了socket接口,OSI模型中TCP和UDP中间留有缝隙,表明上层协议可以通过原始套接字绕过传输层直接使用IP层协议。

GET与POST的区别

幂等:多次执行的结果和一次执行的结果相同

1.get是幂等的,post不是幂等的
2.GET的语义是对资源的获取,POST的语义是对资源的修改
3.get参数附在url中,只能以ascii码编码,post附在请求体中,对类型没有要求
4.get大小有限制,post的数据大小无限制
5.get会被缓存,post的参数不会被缓存

Session与Cookie的区别?

session是服务端记录会话状态的方案,cookie是客户端记录会话状态的方案

cooki保存在客户端本地,向服务端请求时把cookie一并发送给服务端,session保存在服务端,通过sessionid进行检索,禁用了cookie可以使用url重写机制

从输入网址到获得页面的过程-越详细越好

1.浏览器进行域名解析(DNS协议采用UDP),查询浏览器dns缓存 -> 操作系统缓存 -> 本机host文件 -> 本地DNS服务器 -> 上级DNS服务器
2.根据域名解析出的ip发起tcp三次握手
3.进行https握手,获取证书和公钥,验证证书,发送对称加密密码,服务器验证握手摘要,浏览器验证握手摘要,建立https连接
4.浏览器返回静态资源文件,浏览器进行解析和渲染,如果遇到引用的图片,文件,或第三方的js,css等,则重复上述步骤发起请求获取资源
5.渲染所有资源展示页面

HTTP请求有哪些常见状态码

2xx:请求成功
3xx:请求重定向
4xx:客户端错误,错误的请求,错误的url,无权限等
5xx:服务器内部错误,服务不可用

IP地址的分类?

A类:8位网络号+24位主机号
B类:16位网络号+16位主机号
C类:24位网络号+8位主机号

路由器仅根据net-id进行转发分组,请求到达net-id的路由器之后,再根据主机号host-id就请求交给具体主机,

什么叫划分子网?

子网掩码的作用是判断一个ip的网络号,子网掩码和ip按位与即可得到网络号。

什么是ARP协议

ARP的目的是完成IP和mac地址的映射,当数据包要转发到某个ip时,必须知道这台机器的mac地址是多少,主机维护一个ip到mac的映射表,发送数据包时先查询该表,如果找不到需要的映射,就在局域网内进行一个次arp广播,发送arp请求到所有主机并附带自己的ip和mac地址映射,网络中每个主机查看该请求是不是给自己的,如果是就把源主机ip和mac存入arp表,然后返回自己的ip和mac地址。源主机收不到响应则arp查询失败

什么是NAT (网络地址转换)?

用来沟通内外网的协议,使私网地址能够正常访问公网地址,静态nat建立内外网ip直接映射。动态nat主要是解决ipv4地址不足的问题,将内网ip映射到外网ip的不同端口上,实现多个私网ip共享一个公网ip的功能。

根据ip地址和子网掩码计算该网段ip起始范围

起始ip:ip地址和子网掩码按位与
结束ip:ip地址和(子网掩码按位取反)按位或

单IP做NAT支持的最大连接数问题

linux可以通过/proc/net/ip_conntrack文件查看某个报文nat前后端ip及端口,即一个连接。一个连接包含以下几个部分:源地址,端口,目标地址,端口,协议。并且这个五元组可以唯一确定一条连接,五元组全部相同时认为是一个连接。如果采用单ip,则这样可以计算出最大支持的连接数为1x216x232x216x2,这是理想情况下能产生的连接数,极端情况下所有主机都访问同一个ip和端口,能支持的连接数则为216=65536个连接

路由表和路由判定,下一跳

Network destination :目的网段
Netmask:子网掩码
Gateway:网关,又称下一跳路由器。在发送IP数据包时,网关定义了针对特定的网络目的地址,数据包发送到的下一跳服务器。
Interface:接口,接口定义了针对特定的网络目的地址,本地计算机用于发送数据包的网络接口。

如何进行路由判定?
我的理解是这样:当一个数据包到达一台主机,需要将它转发到下一个节点,就是下一跳的ip,那么如何确定下一跳,需要根据路由表进行路由判断,步骤如下。首先将路由表第一条中的子网掩码Netmask和目的网络ipNetwork destination按位与得到网络号,然后看看自己的目标网络是不是这个网络,如果不相同,则转到下一行,重复这个过程,假设在第五行匹配成功,则将该数据包通过第五行中指定的Interface接口(我理解为网卡)发送到Gateway。

OSI七层模型的理解

可以类比spring开发中的视图层,逻辑层,DAO层三层结构一样。OSI也是七层一层一层往下调用,应用层准备好了一个应用层格式的包,调用传输层的函数/模块,把自己的包塞给他发送,传输层对该包进行包装,加上自己的数据头,封装为传输层的数据包格式,然后调用网络层的函数/模块,把自己的包塞给他发送,网络层对该包进行包装,加上自己的数据头,封装为网络层的数据包格式,然后调用链路层的函数/模块。这样一层一层调用下来。解析的时候再一层一层反向拆包解析。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:27:26  更:2021-08-20 15:28:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 17:16:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码