ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

计算机网络学习笔记(七)---常见问题

计算机网络学习笔记(七)---常见问题 ISO七层模型中表示层和会话层功能是什么表示层图像、视频编码解数据加密;会话层建立会话如session认证、断点续传。为什么握手是三次挥手是四次不使用「两次握手」和「四次握手」的原因「两次握手」无法防止历史连接的建立会造成双方资源的浪费也无法可靠的同步双方序列号「四次握手」三次握手就已经理论上最少可靠连接建立所以不需要使用更多的通信次数。对于握手握手需要同步双方通信时的初始序列号。序列号能够保证数据包不重复、不丢弃和按序传输。第三次握手必要性假设服务端的确认丢失连接并未断开客户机超时重发连接请求这样服务器会对同一个客户机保持多个连接造成资源浪费。序列号在 TCP 连接中占据着非常重要的作用当客户端发送携带「初始序列号」的SYN报文的时候需要服务端回一个ACK应答报文表示客户端的 SYN 报文已被服务端成功接收那当服务端发送「初始序列号」给客户端的时候依然也要得到客户端的应答回应这样一来一回才能确保双方的初始序列号能被可靠的同步。对于挥手TCP是双工的所以发送方和接收方都需要发送FIN 连接释放报文和接收ACK应答。只不过有一方是被动的进入了 CLOSE-WAIT 状态。这个状态是为了发送还未传送完毕的数据传送完毕之后会发送 FIN 连接释放报文。FIN_WAIT_2CLOSE_WAIT状态和TIME_WAIT状态FIN_WAIT_2半关闭状态发送断开请求一方还有接收数据能力但已经没有发送数据能力。CLOSE_WAIT状态被动关闭连接一方接收到FIN包会立即回应ACK包表示已接收到断开请求被动关闭连接一方如果还有剩余数据要发送就会进入CLOSED_WAIT状态。TIME_WAIT状态又叫2MSL等待状态如果客户端直接进入CLOSED状态如果服务端没有接收到最后一次ACK包会在超时之后重新再发FIN包此时因为客户端已经CLOSED所以服务端就不会收到ACK而是收到RST。所以TIME_WAIT状态目的是防止最后一次握手数据没有到达对方而触发重传FIN准备的。在2MSL时间内同一个socket不能再被使用否则有可能会和旧连接数据混淆如果新连接和旧连接的socket相同的话。RTORTT和超时重传超时重传发送端发送报文后若长时间未收到确认的报文则需要重发该报文。可能有以下几种情况发送的数据没能到达接收端所以对方没有响应。接收端接收到数据但是ACK报文在返回过程中丢失。接收端拒绝或丢弃数据。RTO从上一次发送数据因为长期没有收到ACK响应到下一次重发之间的时间。就是重传间隔。通常每次重传RTO是前一次重传间隔的两倍计量单位通常是RTT。例1RTT2RTT4RTT8RTT…重传次数到达上限之后停止重传。RTT数据从发送到接收到对方响应之间的时间间隔即数据报在网络中一个往返用时。大小不稳定。流量控制原理目的是接收方通过TCP头窗口字段告知发送方本方可接收的最大数据量用以解决发送速率过快导致接收方不能接收的问题。所以流量控制是点对点控制。TCP是双工协议双方可以同时通信所以发送方接收方各自维护一个发送窗和接收窗。发送窗用来限制发送方可以发送的数据大小其中发送窗口的大小由接收端返回的TCP报文段中窗口字段来控制接收方通过此字段告知发送方自己的缓冲受系统、硬件等限制大小。接收窗用来标记可以接收的数据大小。TCP是流数据发送出去的数据流可以被分为以下四部分已发送且被确认部分 | 已发送未被确认部分 | 未发送但可发送部分 | 不可发送部分其中发送窗 已发送未确认部分 未发但可发送部分。接收到的数据流可分为已接收 | 未接收但准备接收 | 未接收不准备接收。接收窗 未接收但准备接收部分。发送窗内数据只有当接收到接收端某段发送数据的ACK响应时才移动发送窗左边缘紧贴刚被确认的数据。接收窗也只有接收到数据且最左侧连续时才移动接收窗口。拥塞控制原理拥塞控制目的是防止数据被过多注网络中导致网络资源路由器、交换机等过载。因为拥塞控制涉及网络链路全局所以属于全局控制。控制拥塞使用拥塞窗口。TCP拥塞控制算法慢开始 拥塞避免先试探网络拥塞程度再逐渐增大拥塞窗口。每次收到确认后拥塞窗口翻倍直到达到阀值ssthresh这部分是慢开始过程。达到阀值后每次以一个MSS为单位增长拥塞窗口大小当发生拥塞超时未收到确认将阀值减为原先一半继续执行线性增加这个过程为拥塞避免。最终拥塞窗口会收敛于稳定值。区分流量控制和拥塞控制流量控制属于通信双方协商拥塞控制涉及通信链路全局。流量控制需要通信双方各维护一个发送窗、一个接收窗对任意一方接收窗大小由自身决定发送窗大小由接收方响应的TCP报文段中窗口值确定拥塞控制的拥塞窗口大小变化由试探性发送一定数据量数据探查网络状况后而自适应调整。实际最终发送窗口 min{流控发送窗口拥塞窗口}。TCP如何提供可靠数据传输建立连接标志位通信前先建立全双工的连接确认通信实体存在。序号机制序号、确认号确保了数据是按序、完整到达。tcp会按最大传输单元(MTU)合理分片接收方会缓存未按序到达的数据重新排序后交给应用层。而UDPIP数据报大于1500字节大于MTU。这个时候发送方的IP层就需要分片把数据报分成若干片使得每一片都小于MTU。而接收方IP层则需要进行数据报的重组。由于UDP的特性某一片数据丢失时接收方便无法重组数据报导致丢弃整个UDP数据报。数据校验校验和TCP报文头有CRC校验和用于校验报文是否损坏。超时重传定时器保证因链路故障未能到达数据能够被多次重发。窗口机制窗口提供流量控制避免过量发送。流量控制当接收方来不及处理发送方的数据能通过滑动窗口提示发送方降低发送的速率防止包丢失。拥塞控制当网络拥塞时通过拥塞窗口减少数据的发送防止包丢失。为什么 UDP 头部没有「首部长度」字段而 TCP 头部有「首部长度」字段原因是 TCP 有可变长的「选项」字段而 UDP 头部长度则是不会变化的无需多一个字段去记录 UDP 的首部长度。Linux 系统中如何查看 TCP 状态TCP 的连接状态查看在 Linux 可以通过netstat -napt命令查看。可以看到TCP协议源地址端口目标地址端口连接状态Web服务的进程PID和进程名称一个 IP 服务器监听某端口的 TCP 最大连接数是多少服务器通常固定在某个本地端口上监听等待客户端的连接请求。客户端 IP 和 端口是可变的其理论值计算公式为客户端的IP数乘客户端的端口数。对 IPv4客户端的 IP 数最多为2的32次方客户端的端口数最多为2的16次方也就是服务端单机最大 TCP 连接数约为2的48次方。当然服务端最大并发 TCP 连接数远不能达到理论上限。首先主要是文件描述符限制Socket 都是文件所以首先要通过ulimit配置文件描述符的数目另一个是内存限制每个 TCP 连接都要占用一定内存操作系统是有限的。TCP 与 UDP 的区别UDP为了实时性抛弃了可靠性和公平性。TCP为了可靠性和公平性牺牲了实时性。UDP和TCP全世界广泛应用的今天大量网络带宽被UDP占用而TCP由于内置的拥塞控制、流量控制机制而被迫为UDP让路。TCP 面向连接UDP 是无连接的TCP 提供可靠的服务也就是说通过 TCP 连接传送的数据无差错不丢失不重复且按序到达UDP 尽最大努力交付即不保证可靠交付TCP 的逻辑通信信道是全双工的可靠信道UDP 则是不可靠信道每一条 TCP 连接只能是点到点的UDP 支持一对一一对多多对一和多对多的交互通信TCP 面向字节流可能出现黏包问题实际上是 TCP 把数据看成一连串无结构的字节流UDP 是面向报文的不会出现黏包问题UDP 没有拥塞控制因此网络出现拥塞不会使源主机的发送速率降低对实时应用很有用如 IP 电话实时视频会议等TCP 首部开销20字节UDP 的首部开销小只有 8 个字节TCP经常用于FTP 文件传输HTTP/HTTPSUDP常用于包总量较少的通信包括DNS、SNMP等视频、音频等多媒体通信广播通信初始序列号 ISN 是如何随机产生的起始ISN是基于时钟的每 4 毫秒 1转一圈要 4.55 个小时。RFC1948 中提出了一个较好的初始化序列号 ISN 随机生成算法。ISN M F (localhost, localport, remotehost, remoteport)M是一个计时器这个计时器每隔 4 毫秒加 1。F是一个 Hash 算法根据源 IP、目的 IP、源端口、目的端口生成一个随机数值。要保证 Hash 算法不能被外部轻易推算得出用 MD5 算法是一个比较好的选择。TIME_WAIT客户端接收到服务器端的 FIN 报文后进入此状态此时并不是直接进入 CLOSED 状态还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文那么就会重新发送连接释放请求报文A 等待一段时间就是为了处理这种情况的发生。等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失使得下一个新的连接不会出现旧的连接请求报文。TCP 黏包问题TCP 是一个基于字节流的传输服务UDP 基于报文的“流” 意味着 TCP 所传输的数据是没有边界的。所以可能会出现两个数据包黏在一起的情况。假设客户端分别发送了两个数据包D1和D2给服务端由于服务端一次读取到的字节数是不确定的故可能存在以下4种情况。服务端分两次读取到了两个独立的数据包分别是D1和D2没有粘包和拆包服务端一次接收到了两个数据包D1和D2粘合在一起被称为TCP粘包服务端分两次读取到了两个数据包第一次读取到了完整的D1包和D2包的部分内容第二次读取到了D2包的剩余内容这被称为TCP拆包服务端分两次读取到了两个数据包第一次读取到了D1包的部分内容D1_1第二次读取到了D1包的剩余内容D1_2和D2包的整包。特例如果此时服务端TCP接收滑窗非常小而数据包D1和D2比较大很有可能会发生第五种可能即服务端分多次才能将D1和D2包接收完全期间发生多次拆包。解决发送定长包。如果每个消息的大小都是一样的那么在接收对等方只要累计接收数据直到数据等于一个定长的数值就将它作为一个消息。包头加上包体长度。包头是定长的 4 个字节说明了包体的长度。接收对等方先接收包头长度依据包头长度来接收包体。在数据包之间设置边界如添加特殊符号\r\n标记。FTP 协议正是这么做的。但问题在于如果数据正文中也含有\r\n则会误判为消息的边界。使用更加复杂的应用层协议。像目前比较火热的开发岗位实属网络安全毕竟国家网络安全法也出台了网络安全等级保护2.0等合规要求也出来了。网络安全对于大部分政企单位来说已经从[可选项]变成了[必选项]。在以前很多政企单位在进行 IT 部门及岗位划分时只有研发和运维部门安全人员直接归属到基础运维部而现在越来越多单位为了满足国家安全法律法规的要求必须成立独立的网络安全部门拉拢各方安全人才、组建 SRC安全响应中心为自己的产品、应用、数据保卫护航。根据国家发布的《网络安全人才实战能力白皮书》数据显示目前中国网络安全人才供应严重匮乏每年高校安全专业培养人才仅有3万余人而网络安全岗位缺口在2027年将达327万缺口高达95%。了解网络安全首先要搞清楚下面这些前提网络安全到底包含哪些技术是否需要会编程网络安全行业有哪些职业方向“我”该如何选择网络安全的职业发展和成长路线是什么如果你是准备学习网络安全黑客或者正在学习下面这些你应该能用得上①网络安全学习路线②20份渗透测试电子书③安全攻防357页笔记④50份安全攻防面试指南⑤安全红队渗透工具包⑥网络安全必备书籍⑦100个漏洞实战案例⑧安全大厂内部视频资源⑨历年CTF夺旗赛题解析一、网络安全黑客学习路线网络安全黑客学习路线形成网络安全领域所有的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。二、网络安全教程视频我们在看视频学习的时候不能光动眼动脑不动手比较科学的学习方法是在理解之后运用它们这时候练手项目就很适合了。三、网络安全CTF实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这里带来的是CTFSRC资料HW资料毕竟实战是检验真理的唯一标准嘛~四、网络安全面试题最后我们所有的作为都是为就业服务的所以关键的临门一脚就是咱们的面试题内容所以面试题板块是咱们不可或缺的部分这里我给大家准备的就是我在面试期间准备的资料。网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表