| |
|
开发:
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状态 从结果来看,三次握手的意义如下: 为什么不能两次握手? 可以四次握手吗? server进入close状态之后,client向服务端发送数据,服务端会用RST包应答。 四次挥手TCP是双工通信,server可以发送并接收数据,client可以发送并接受数据。 第一次挥手:客户端发送FIN=1和seq=x 进入FINwait状态 为什么不能像三次握手一样变成三次挥手? 为什么要等待2*报文段最长寿命? TCP流量控制如何实现控制流量,防止发送方速率太快,使接收方缓存区不够导致溢出。使用滑动窗口协议实现,窗口是一段连续的待发送的字节序列,序列的范围是窗口的大小,接收方根据自己的资源情况,通过ACK告知发送可以收的窗口大小,发送发根据这个大小确定自己的发送速率,发送的速率是滑动窗口和拥塞窗口中的较小值。发送方在收到接收方的ACK包后,将窗口右移发送新的数据。 TCP的拥塞控制是怎么实现的?拥塞控制包括四种算法:慢启动,拥塞避免,快重传,快恢复 慢启动:初始时将拥塞窗口大小置为一个最大报文段MSS的大小,每个传播轮次拥塞窗口的大小呈指数增长,为什么是指数增长?因为在一个传播轮次中,每收到一个确认报文后拥塞窗口大小就加一个MSS,假设一个传播轮次中发了4包,收到4个确认包,则此时需要将窗口大小加4,变成8,下一个传博轮次中,发送8个包,收到8个确认包,需要将窗口大小加8,变成16,不断加倍。 拥塞避免:拥塞窗口大小达到慢开始门限时,执行拥塞避免算法,每个传播轮次窗口大小不再加倍,而是加一MSS,窗口大小呈线性增长。 快重传:接收方收到一个失序报文段之后立刻发出重复确认,不要等到发送数据时捎带确认,当发送方连续三次收到重复确认后,立即重发缺失报文段,不必等待重传计时器到期。 快恢复:发送方收到三个确认重传包后,把慢门限减半,然后执行拥塞避免算法,让每个轮次的拥塞窗口继续线性增长。 TCP如何最大利用带宽?TCP速率受三个因素影响:发送方速率,接收方速率,链路能承载速率,木桶原理,整体速率取决于三者中最小的那个。 因此可以看出,距离越短,则RTT越短,发送数据频率越快,速率越高。窗口越大,则每个轮次发送的数据越多,速率越高,同时物理带宽越大,链路越通畅速率自然越高。 TCP与DP的区别面向连接和无连接:在通信前一个需要建立连接,一个不需要 可靠和不可靠:一个需要确认收到的数据包,校验数据包顺序,未收到则需要重传,一个不需要 TCP只能一对一,UDP可以一对多,多对多 TCP面向字节流(一个包可以拆成若干分组,发送时以字节为单位),UDP面向报文流(报文只能一次发完) 另外TCP有拥塞机制,UDP没有,UDP发送速率不因网络拥塞而降低。TCP首部开销比UDP大。 实时性要求高的选UDP(游戏,视频,直播),否则选TCP(HTTP需要可靠的协议,使用TCP) TCP如何保证传输的可靠性数据包校验,失序(数据包)重拍,丢弃重复(数据包),收到确认,超时重传,流量控制(确保接收发送方的缓存区不溢出) HTTP和HTTPS的区别使用的端口不同 https连接过程: 可以看出,非对称加密的作用是传输握手过程中生成的对称加密的密钥,真正的信息使用对称加密密钥进行加密。使用HASH算法验证数据完整性 https如何避免中间人攻击? http跳转https:301代表永久跳转,302代表临时跳转 对称加密和非对称加密: 数字签名:A使用md5对内容生成签名,并用私钥加密,B用公钥加密,取出内容用md5加密后与签名对比,一致则说明内容完整,并且私钥只有A有,所以一定来源于A,不可抵赖 socket套接字的理解socket套接字是OSI模型中从上三层(应用,表示,会话)进入下四层(传输,网络,链路,物理)的入口,一般认为在网络相关的进程中,上三层构成了用户进程,负责处理应用层的具体细节,而下四层构成了操作系统的内核进程,负责处理通信相关的所有细节,操作系统提供用户进程到系统进程的隔离机制,用户进程需要接口才能调用系统进程,因此在从应用层进入传输层的时候构建了socket接口,OSI模型中TCP和UDP中间留有缝隙,表明上层协议可以通过原始套接字绕过传输层直接使用IP层协议。 GET与POST的区别幂等:多次执行的结果和一次执行的结果相同 1.get是幂等的,post不是幂等的 Session与Cookie的区别?session是服务端记录会话状态的方案,cookie是客户端记录会话状态的方案 cooki保存在客户端本地,向服务端请求时把cookie一并发送给服务端,session保存在服务端,通过sessionid进行检索,禁用了cookie可以使用url重写机制 从输入网址到获得页面的过程-越详细越好1.浏览器进行域名解析(DNS协议采用UDP),查询浏览器dns缓存 -> 操作系统缓存 -> 本机host文件 -> 本地DNS服务器 -> 上级DNS服务器 HTTP请求有哪些常见状态码2xx:请求成功 IP地址的分类?A类:8位网络号+24位主机号 路由器仅根据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做NAT支持的最大连接数问题linux可以通过/proc/net/ip_conntrack文件查看某个报文nat前后端ip及端口,即一个连接。一个连接包含以下几个部分:源地址,端口,目标地址,端口,协议。并且这个五元组可以唯一确定一条连接,五元组全部相同时认为是一个连接。如果采用单ip,则这样可以计算出最大支持的连接数为1x216x232x216x2,这是理想情况下能产生的连接数,极端情况下所有主机都访问同一个ip和端口,能支持的连接数则为216=65536个连接 路由表和路由判定,下一跳Network destination :目的网段 如何进行路由判定? OSI七层模型的理解可以类比spring开发中的视图层,逻辑层,DAO层三层结构一样。OSI也是七层一层一层往下调用,应用层准备好了一个应用层格式的包,调用传输层的函数/模块,把自己的包塞给他发送,传输层对该包进行包装,加上自己的数据头,封装为传输层的数据包格式,然后调用网络层的函数/模块,把自己的包塞给他发送,网络层对该包进行包装,加上自己的数据头,封装为网络层的数据包格式,然后调用链路层的函数/模块。这样一层一层调用下来。解析的时候再一层一层反向拆包解析。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/25 20:47:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |