网站代码快捷键,网站转wordpress,提供邯郸手机网站建设,项目进度管理软件app目录 1. 为什么需要网络协议的分层#xff1f;2. 【封装和分用】3. Socket套接字主要针对传输层协议划分为如下三类#xff08;了解#xff09;4. 简单说一下TCP和UDP的区别#xff1a;5. TCP中的长短连接6. 应用层重点协议7. TCP可靠传输机制#xff08;三次握手四次挥手… 目录 1. 为什么需要网络协议的分层2. 【封装和分用】3. Socket套接字主要针对传输层协议划分为如下三类了解4. 简单说一下TCP和UDP的区别5. TCP中的长短连接6. 应用层重点协议7. TCP可靠传输机制三次握手四次挥手8. TCP相关机制9. 面向字节流的粘包问题10. TCP的异常处理11. 如何使用UDP来实现可靠传输12. 关于IP地址具体的规则IPV413. 如何划分网络号和端口号14. 数据链路层15. [高频]从浏览器输入一个URL到最终展示的页面大概都会经历哪些事情 努力经营当下 直至未来明朗 1. 为什么需要网络协议的分层
1分层最大的好处类似于面向接口编程定义好两层间的接口规范让双方遵循这个规范来对接。 2在代码中类似于定义好一个接口一方为接口的实现类提供方提供服务一方为接口的使用类使用方使用服务 对于使用方来说并不关心提供方是如何实现的只需要使用接口即可 对于提供方来说利用封装的特性隐藏了实现的细节只需要开放接口即可。 3这样能更好的扩展和维护。
2. 【封装和分用】
TCP/IP五元组下到上物理层、数据链路层帧、网络层IP、数据报、传输层TCP/UDP、段、应用层封装从上到下进行封装在各层加上需要的协议头和尾。传输层加上源端口和目的端口网络层加上源IP和目的IP数据链路层加上源MAC地址和目的MAC地址。分用从下到上逐层拿去协议的头尾。
3. Socket套接字主要针对传输层协议划分为如下三类了解
流套接字使用传输层TCP协议 ① TCP即Transmission Control Protocol传输控制协议传输层协议。 ② 以下为TCP的特点 有连接 可靠传输 面向字节流 有接收缓冲区也有发送缓冲区 大小不限 ③ 对于字节流来说可以简单的理解为传输数据是基于IO流流式数据的特征就是在IO流没有关闭的情况下是无边界的数据可以多次发送也可以分开多次接收
数据报套接字使用传输层UDP协议 ① UDP即User Datagram Protocol用户数据报协议传输层协议。 ② 以下为UDP的特点 无连接 不可靠传输 面向数据报 有接收缓冲区无发送缓冲区 大小受限一次最多传输64k ③ 对于数据报来说可以简单的理解为传输数据是一块一块的发送一块数据假如100个字节必须一次发送接收也必须一次接收100个字节而不能分100次每次接收1个字节。
原始套接字 原始套接字用于自定义传输层协议用于读写内核没有处理的IP协议数据。
4. 简单说一下TCP和UDP的区别
TCP 有连接、可靠传输、面向字节流、全双工UDP 无连接、不可靠传输、面向数据报、全双工 ① 有无连接如打电话是有连接的发微信是没连接的。即有连接是要先建立连接后才可以通信无连接是可以直接进行发送。 ② 可靠传输不是说A给B发的数据100%能够让B收到而是A可以知道B有没有收到。 ③ 字节流IO的章节有介绍如InputStream、OutputStream即TCP是基于流的。 ④ 面向数据报UDP是以“数据报”为基本单位的 ⑤ 全双工相对的词是半双工。 全双工一个通道双向通信 半双工一个通道单向通信。 网络通信一般都是全双工。 5. TCP中的长短连接
TCP发送数据时需要先建立连接什么时候关闭连接就决定是短连接还是长连接 短连接每次接收到数据并返回响应后都关闭连接即是短连接。也就是说短连接只能一次收发数据。 长连接不关闭连接一直保持连接状态双方不停的收发数据即是长连接。也就是说长连接可以多次收发数据。对比以上长短连接两者区别如下 ① 建立连接、关闭连接的耗时短连接每次请求、响应都需要建立连接关闭连接而长连接只需要第一次建立连接之后的请求、响应都可以直接传输。相对来说建立连接、关闭连接也是要耗时的长连接效率更高。 ② 主动发送请求不同短连接一般是客户端主动向服务端发送请求而长连接可以是客户端主动发送请求也可以是服务端主动发。 ③ 两者的使用场景有不同短连接适用于客户端请求频率不高的场景如浏览网页等。长连接适用于客户端与服务端通信频繁的场景如聊天室实时游戏等。
6. 应用层重点协议
DNS 1DNS即Domain Name System域名系统。DNS是一整套从域名映射到IP的系统。 2DNS协议是应用层协议基于传输层UDP或TCP协议来实现。NAT、NAPT 1NAT技术是当前解决IP地址不够用的主要手段是路由器的一个重要功能。主要是一种将私有IP和全局IP相互转化的技术方法。 2全局IP要求唯一但是私有IP不需要。 3故NAPT使用IPport来建立这个关联关系来区分如路由器全局IP将内容转发给哪个私有IP。HTTP/HTTPS
7. TCP可靠传输机制三次握手四次挥手
【可靠传输指的是数据传输过去之后发送方能够知道自己是发送成功还是没成】
确认应答 1【确认应答机制】就是TCP保证可靠性的最核心机制 2网络通信会存在“后发先至”情况网络上通信传输的路径是复杂的两点之间两个报文可能会走不一样的路线。 而“后发先至”是网络的基本结构导致的是无法避免的所以只能自己想办法让含义不被误会故解决方案针对请求和应答报文进行编号。也就是说在确认应答机制中引入序号32位来保证不出现歧义。 3确认应答描述的是 数据包顺利到达对方且对方给出响应但是在传输过程中可能会丢包如果丢包又该如何呢 ① 【丢包的原因网络环境非常复杂且交换机的转发能力是有上限的如果数据报庞大的情况导致交换机的转发达到上限此时就无法快捷的完成转发了就可能会导致一部分数据报超时。】 ② 如果数据丢包了此时就需要考虑通过“超时重传”来进行了。 超时重传 1在丢包的情况下 如何进行【超时重传】呢 ① 如果是发送方数据丢了就进行正常超时重传 ② 如果是ACK应答报文丢了则实际操作是发送方发的消息也需要再次发送此时因为丢失ACK就会导致接收方收到重复信息但是这明显不是最妥善的处理方式所以TCP就会针对相同的消息进行去重根据序号来去重就行保证了应用层代码通过socket读取数据的时候读到的不是重复数据。 2那么超时时间如何确定 一般系统里会有一个配置项来描述超时时间的阈值但是实际的超时时间是不确定的。 例如第一次出现丢包时发送方就会在达到超时时间阈值之后进行重传如果重传的数据仍然无响应那么还会继续进行超时重传但是第二次超时时间一般要比第一次更长也就是超时时间并不是均等的而是逐渐变大的。 【超时时间逐渐变大的理由】如果单个数据报丢包的概率较小此时由概率论计算可知第二次传输大概率是可以顺利到达的如果第二次传输也没有到达的话一般就说明当前环境比较糟糕此时单个数据报丢包的概率就非常大了如此就算传输再频繁也是无济于事的倒不如降低传输频率以节省主机开销。 3这样的重传如果在重试几次之后依旧无法传输就会尝试重置TCP连接也就是断开重连此时如果还是连不上就直接释放连接彻底放弃连接。
连接管理三次握手、四次挥手【面试题】 1三次握手建立连接的过程 2为啥要建立连接建立连接的意义是啥 ① 投石问路检查一下当前的网络状况是否畅通。三次握手建立连接其实并不传输任何业务信息 ② 三次握手同时也是在检查通信双方的发送能力和接收能力两次是不行的测试不完整 ③ 三次握手过程中也在协商一些重要的参数。如TCP序号并不是从1开始的通常是在建立连接的时候协商的数字如果连接断开又快速重连接收方就可以区分当前收到的数据是上个连接还是当前连接。 3【两个重点的TCP状态建立连接】 ① LISTEN服务器启动且绑定端口之后new ServerSccket完成相当于手机开机、信号良好别人可以进行打电话。 ② ESTABLISHED连接建立好之后的稳定状态相当于拨通电话之后可以进行说话交流了。
4断开连接四次挥手 5为什么“三次握手四次挥手” ① 在“三次握手”中主机B给主机A返回确认ACK以及申请连接SYN都是由内核触发的时机完全相同操作系统就会把两个包合并成一个 为啥不能是“四次握手”可以但没必要白白浪费时间 ② 在“四次挥手”中ACK和FIN的触发时机是不相同的ACK是由操作系统内核收到主机A给B发送的FIN之后立即触发的而主机B给A发送FIN是应用程序显式的调用socket的close方法触发的。
6两个重要的TCP状态断开连接 ① CLOSE_WAIT等待代码中调用close操作。如果服务器上出现大量的CLOSE_WAIT状态的连接说明服务器代码bugclose没有被及时调用到 ② TIME_WAIT返回ACK的一方会进入TIME_WAIT。 如主机A在处理完上一个ACK之后不能立即释放连接而是需要保持一定时间这是为了万一最后的ACK丢了还有机会进行重传。也就是说如果A给B发送确认ACK的时候ACK丢包了那么此时B就需要给A重新发送FIN此时A处的TIME_WAIT就是非常必要的如果A在等了一段时间之后没有FIN重传过来就认为ACK顺利到达了 8. TCP相关机制
滑动窗口 提高TCP传输效率的有效机制发送方是批量发送数据。流量控制 1在滑动窗口基础上对发送速率作出限制的机制其实就是在限制发送方的窗口不要太大尽量保持在一个合适的大小。 2接收方使用内核的接收缓冲区的剩余空间大小来作为发送方发送速率窗口大小的参考数值 此处补充UDP是只有接收缓冲区没有发送缓冲区的 3流量控制是通过接收方的处理能力来衡量发送方的速率的拥塞控制是根据中间节点来进行控制的。 1TCP实现拥塞控制的具体方式是啥 ① TCP引入慢启动机制先发少量的数据因为发送之初网络情况未知 ② 如果不丢包就需要放大拥塞窗口拥塞控制下的那个窗口的大小开始的时候先指数增长翻倍达到阈值之后线性增长。 【指数增长可以在短时间内摸清楚网络承载的底线而为了防止翻倍太快一下超过上限就设置一个阈值达到阈值之后就不再指数增长转为线性增长】 当速率达到上限就会出现网络拥堵从而出现丢包此时窗口大小一下子会回到最初的值重复刚才的指数增长线性增长并且要动态调整阈值阈值调整为刚才丢包的窗口的一半。 7. 延迟应答 1延迟应答 是基于流量控制来引入的提高效率的机制 2延迟应答返回ACK的时间稍微晚一点不是立即返回此时应用程序就会有时间来消费内核接收缓冲区中的数据使得接下来ACK返回的窗口略大于立即返回的窗口。
捎带应答 1捎带应答是基于延迟应答的基础上引入的。 2TCP中只要把数据传输过去对方收到后就会立即由内核返回一个ACK确认报文而响应数据则是由应用程序负责传输的。所以返回ACK和响应这两个操作是不同的时机传输的就不能够把两次传输合并起来但是延迟应答就会让ACK延迟返回会稍微等一会儿而在等待之后业务如果刚好也要返回响应此时就可以把ACK与响应两个报文合二为一了是由内核处理的应用程序处理的响应也要经过内核即应用程序是调用socket的write方法把数据交给内核内核进行封装然后发送。
9. 面向字节流的粘包问题
要想解决粘包问题就在应用层协议这里进行区分只要在定义应用层数据协议的时候明确包和包之间的“边界”就可以了。典型的办法有两种 ① 通过分隔符比如约定使用;作为包的结束标记 ② 通过指定包的长度比如在数据报的开头位置声明长度
10. TCP的异常处理
TCP中的连接如果出现异常怎么办 1程序崩溃 ① 相当于进程的异常退出。而程序退出正常or异常之后操作系统就会回收进程的资源包括释放文件描述符表这样的释放操作就相当于调用了对应socket的close执行close就会触发FIN报文进一步开始四次挥手。 ② 所以该情况与普通的四次挥手没啥区别。 2正常关机通过开始菜单这种方式来关闭主机 关机的时候系统会先强制结束所有的用户进程和上述的进程崩溃类似系统内核会进行文件描述符表的释放操作从而进一步进行四次挥手。 3断电关机主机掉电 非常突然猝不及防。 ① 掉电的是接收方发送方并不知道对面已经挂了会继续发送数据。 但是此时发送的数据就没有ACK返回发送方就会触发超时重传重传了几次之后仍然没有应答此时就会尝试重置连接通过复位报文段但是也会失败此时就会直接放弃连接。 【复位报文段其实就是TCP报头中特殊标志位中的RST为1就是有效的】 补充特殊标志位中PSH向对方所要数据希望对方给个回应 URG跟紧急指针相关 ② 掉电的是发送方此时接收方就只能等着。 但是接收方也不是干等等了一段时间之后就会发送一个“心跳包”心跳包是周期性触发的只是一个简单的不携带任何业务数据的包存在的意义就是确认一下对方是否还在。 如果对方不返回心跳包说明此时对方已经挂了。 4网线断开 情况同主机掉电类似只不过通信双方的主机都正常这两端各自按照上述两种情况分别进行。 11. 如何使用UDP来实现可靠传输
主要考查的其实是TCP 其实就是基于UDP在应用层来实现确认应答、超时重传、引入序列号、滑动窗口会确认都收到才滑到下一个、流量控制、拥塞控制等等。
12. 关于IP地址具体的规则IPV4
IP地址分为两个部分网络号和主机号 ① 网络号标识网段保证相互连接的两个网段网段网络号局域网的身份标识具有不同的标识网段具有不同标识便是不同局域网用网络号来表示局域网 ② 主机号标识主机同一网段内主机之间具有相同的网络号但是必须有不同的主机号表示不同主机 【同一个局域网中主机之间的网络号是相同的但是主机号必须不同。】 在相邻的局域网中同一个路由器WAN口和LAN口有不同的网络号连接的局域网要求网络号是不同的 13. 如何划分网络号和端口号
1子网掩码可以划分从哪里到哪里是一个网络号。 2子网掩码有32位左半边都是1右半边都是0不会0/1混合 3子网掩码左半边有多少个1就表示IP地址左侧有多少位的网络号。 4把子网掩码与IP地址按位与运算得到的结果就是网络号
14. 数据链路层
数据链路层中最关键的是以太网目的IP是终点的IP地址而目的MAC是相邻结点的MAC地址ARP一个介于数据链路层和网络层之间的协议ARP协议建立了主机 IP地址 和 MAC地址 的映射关系。
15. [高频]从浏览器输入一个URL到最终展示的页面大概都会经历哪些事情
这其实是一个开放性问题有很多角度 站在后端开发的角度【大纲详细可以参考网上回答】 1DNS域名解析 ① 在浏览器输入一个网址URL后首先要进行DNS域名解析 网络上的设备都是通过IP地址作为身份标识的但是IP地址不好记/不好传播此时就可以使用一串单词域名如http://www.baidu.com来表示这个IP地址。 但是实质上网络的数据传输还是通过IP地址的所以就需要把域名解析成IP地址。 所以DNS系统功能就是把域名自动转换成IP地址。
2封装 ② 转换完成后就得到一个IP地址浏览器就可以构造出HTTP数据报 ③ HTTP数据报被交给了传输层也就是是TCPTCP就根据刚才的地址先建立连接三次握手然后再发送刚才的HTTP请求。 ④ 请求被发送到网络层也就是IP协议IP协议将其封装成IP数据报再交给数据链路层。 ⑤ 数据链路层收到IP数据报后将其封装成对应的数据帧最终通过网卡传输出去。 3传输中间会经历一些交换机和路由器 ⑥ 交换机 会把数据分用到数据链路层更上层的就不再解析了再重新封装继续转发。 ⑦ 路由器 会把数据分用到网络层更上层就不再进行解析了重新封装继续转发。 转发过程涉及到路由表的匹配过程路由器根据数据报中的目的IP在路由表中匹配找个合适的方向发出去。注每次转发TTL都减1 4到达服务器 ⑧ 到达目标服务器之后服务器进行层层分用一直到HTTP这一层HTTP具体解析过程后面再说 ⑨ 服务器就会找到你想访问的那个资源把资源构造成HTTP响应也就是根据请求计算响应 5服务器把响应数据进行重新封装同以上2 6响应数据在中间进行转发回到浏览器 7浏览器客户端这里再针对数据进行解析【分用】 8最终解析出一个网页并渲染到浏览器上。