admin 管理员组

文章数量: 887021

互联网面试知识点总结(三)- 计算机网络篇

  • ******************************* 概 述 *******************************
  • 一. OSI七层模型及其包含协议
  • 二. 列举各个层使用的是哪个数据交换设备
  • ******************************* 链路层 *******************************
  • 一. 链路层工作流程
  • 二. 链路层三个基本问题
  • 三. CSMA/CD协议工作流程
  • ******************************* 网络层 *******************************
  • 一. IP地址分类
  • 二. ARP协议工作过程
  • 三. IP数据报格式
  • 四. IP分组转发算法
  • 六. CIDR路由器聚合
  • 七. ICMP协议
  • 八. IPV4和IPV6的区别
  • 九. 单播、广播和多播区别
  • 十. IP地址和MAC地址的区别
  • ******************************* 运输层 *******************************
  • 一. TCP和UDP区别
  • 二. TCP首部字段
  • 三. TCP选项字段
  • 四. 为什么要规定一个最大报文段长度MSS
  • 五. TCP如何保证可靠性
  • 六. TCP流量控制
  • 七. 糊涂窗口综合征
  • 八. 拥塞控制和流量控制的区别
  • 九. TCP拥塞控制
  • 十. TCP建立连接的三次握手
  • 十一. TCP断开连接的四次握手
  • 十二. 为什么建立连接要进行三次握手
  • 十三. 为什么TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态
  • 十四.
  • 十五. 如果已经建立了连接,但是客户端突然出现故障了怎么办
  • 十六. TCP短连接和长连接的区别
  • 十七. TCP粘包、拆包及解决办法
  • 十八. 提高网络利用率办法
  • ******************************* 应用层 *******************************
  • 一. HTTP协议特性
  • 二. HTTP的请求报文和响应报文
  • 三. HTTP协议请求方法
  • 四. get和post区别
  • 五. HTTP首部字段
  • 六. HTTP协议返回码
  • 七. HTTP和HTTPS协议的区别
  • 八. HTTP/1.0和HTTP/1.1的区别
  • 九. HTTP/1.1和HTTP/2.0的区别
  • 十. HTTP/2.0和HTTP/3.0的区别
  • 十一. 浏览器输入URL会发生什么
  • 十二. DCHP动态主机配置协议工作流程
  • 十三. cookie和session区别
  • 十四. DNS解析过程
  • 十五. URI和URL
  • 十六. 代理服务器
  • ****************************** 网络安全 ******************************
  • 一. 对称加密和非对称加密的区别
  • 二. 报文鉴定码MAC
  • 三. 数字签名流程
  • 四. 数字证书
  • 五. SSL加密过程
  • **************************** Socket编程 ****************************
  • 一. SYN攻击及解决办法
  • 二. TIME_WAIT 过多的危害及优化方式

******************************* 概 述 *******************************

一. OSI七层模型及其包含协议

  1. 应用层:通过应用进程间的交互来完成特定的网络应用,应用层协议定义进程间通信和交互的规则,主要协议有HTTP、SMTP、DNS、DHCP协议等
  2. 表示层:对数据进行翻译、加密和压缩,主要包括协议有JPEG、ASII
  3. 会话层:建立管理和终止会话,主要包括协议有RPC、NFS
  4. 运输层:负责向两台主机中进程之间的通信提供通用的数据传输服务,主要协议有TCP、UDP协议
  5. 网络层:负责为分组交换网上的不同主机提供通信服务,主要协议有IP、ARP、ICMP协议
  6. 链路层:将网络层交付下来的数据报组装成帧,在两个相邻节点间的链路上进行传递,主要协议有CSMA、VLAN协议
  7. 物理层:通过媒介传输比特,确定机械以及电气规范,主要包括协议有IEEE802.3,CLOCK,RJ45

二. 列举各个层使用的是哪个数据交换设备

  1. 网关:应用层(网关又叫协议转换器,是一种复杂的网络连接设备,可以支持不同协议之间的转换,实现不同协议网络之间的互连)
  2. 路由器:网络层(路由选择、存储转发)
  3. 交换机:数据链路层(识别数据包中的 MAC 地址信息,根据 MAC 地址进行转发,并将这些 MAC 地址与对应的端口记录在自己内部的一个地址表中)
  4. 网桥:数据链路层(将两个 LAN 连起来,根据 MAC 地址来转发帧)
  5. 集线器:物理层(纯硬件设备,主要用来连接计算机等网络终端)

******************************* 链路层 *******************************

一. 链路层工作流程

  1. 结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧
  2. 结点A把封装好的帧发送给结点B的数据链路层
  3. 若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报交给上面的网络层;否则丢弃这个帧

二. 链路层三个基本问题

  1. 封装成帧
    在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束,首部和尾部的作用是进行帧定界(即确定帧的界限
  2. 透明传输
    由于帧的开始和结束的标记使用专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。为了解决透明传输问题,就必须设法使数据中可能出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。具体的方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”,而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符
  3. 差错检测
    对于通信质量良好的有线传输链路,数据链路层协议不使用确认和重传机制,即不要求数据链路层向上提供可靠传输的服务。如果在数据链路层传输数据时出现了差错并且需要进行改正,那么改正差错的任务就由上层协议(例如,运输层的TCP协议)来完成
    对于通信质量较差的无线传输链路,数据链路层协议使用确认和重传机制,数据链路层向上提供可靠传输的服务

三. CSMA/CD协议工作流程

  1. 准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中。但在发送之前,必须先检测信道
  2. 检测信道:若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在96比特时间内信道保持空闲(保证了帧间最小间隔,给接收端流出缓冲时间),就发送这个帧
  3. 在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:
    ① 发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。发送完毕后,其他什么也不做,然后回到步骤1
    ② 发送失败:在争用期内检测到碰撞。这时立即停止发送数据,。适配器接着就执行指数退避算法,等待 r 倍512比特时间后,返回到步骤2,继续检测信道。但若重传达16次仍不能成功,则停止重传而向上报错

******************************* 网络层 *******************************

一. IP地址分类

  • A类、B类和C类地址的网络号字段分别为1个、2个和3个字节长,而在网络号字段的最前面有1~3位的类别位,其数值分别规定为0,10和110
  • A类、B类和C类地址的主机号字段分别为3个、2个和1个字节长
  • D类地址(前4位是1110)用于多播(一对多通信)。我们将在4.6节讨论IP多播
  • E类地址(前4位是1111)保留为以后用
  • 特殊IP地址

二. ARP协议工作过程

ARP协议是解决了同一局域网上主机或者路由器的IP地址和硬件地址之间的映射

  1. 源主机和目的主机在同一局域网
    • 源主机先会查看自己的ARP高速缓存中是否有目的IP地址的MAC地址记录
    • 如果源主机的高速缓存中有目的IP地址的记录,则直接通过这个MAC地址进行数据的传输
    • 如果源主机的高速缓存中没有目的IP地址的记录,则会向局域网的所有主机广播一个ARP请求,寻找目的IP地址的MAC地址
    • 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和mac地址写入到ARP列表中,如果以存在,则覆盖然后将自己的mac地址写入arp响应包中,告诉源主机自己是它想要找的mac地址
    • 源主机收到ARP响应包后,将目的主机的IP和mac地址写入ARP列表,并利用此信息发送数据
  2. 源主机和目的主机不在同一个局域网
    • 源主机主机先通过广播一个ARP请求,找到本网络中的一个路由器的MAC地址,然后将数据包直接给路由器
    • 当路由收到数据包后,如果目的IP地址在子网络中的话,这时通过ARP找到目的主机MAC地址,然后把数据包给目的主机。
    • 如果目的主机不和源主机发送数据的路由器在同一网络内的话,则路由器会通过ARP协议找到下一跳的路由器,然后把数据包发送到该路由上,以此类推

三. IP数据报格式

  1. 版本:占 4 位,指 IP 协议的版本 目前的 IP 协议版本号为 4 (即 IPv4)
  2. 首部长度:占 4 位,可表示的最大数值 是 15 个单位(一个单位为 4 字节) 因此 IP 的首部长度的最大值是 60 字节
  3. 区分服务:占 8 位,用来获得更好的服务 在旧标准中叫做服务类型,但实际上一直未被使用过
  4. 总长度——占 16 位,指首部和数据之和的长度, 单位为字节,因此数据报的最大长度为 65535 字节, 总长度必须不超过最大传送单元 MTU
  5. 标识:占 16 位, 它是一个计数器,用来产生数据报的标识
  6. 标志:占 3 位,标志字段的最低位是 MF,MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。 标志字段中间的一位是 DF,只有当 DF = 0 时才允许分片
  7. 片偏移:占13 位,指出较长的分组在分片后某片在原分组中的相对位置,片偏移以 8 个字节为偏移单位
  8. 生存时间:占8为,记为 TTL,数据报在网络中可通过的路由器数的最大值
  9. 协议:占8位,字段指出此数据报携带的数据使用何种协议 以便目的主机的 IP 层将数据部分上交给哪个处理过程,TCP对应6,UDP对应17
  10. 首部检验和:占16位,字段只检验数据报的首部不检验数据部分

四. IP分组转发算法

  1. 从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。
  2. 若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址D转换为具体的硬件地址)
  3. 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行4
  4. 若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行6
  6. 报告转发分组出错

六. CIDR路由器聚合

  1. 消除传统的A,B,C地址和划分子网的概念,更有效的分配IPv4的地址空间,CIDR使IP地址又回无分类的两级编码
  2. 构成超网:将网络前缀缩短,网络前缀越短,其地址块所包含的地址数就越多,路由聚合有利于减少路由之间的路由选择信息交换,从而提升了整个因特网性能

七. ICMP协议

为了更有效地转发IP数据报和提高交付成功的机会,ICMP协议允许主机或路由器报告差错情况和提供有关异常情况的报告

  1. ICMP差错报告报文
    • 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文
    • 超时:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文
    • 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
    • 改变路由(重定向) :路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)
  2. 不发送ICMP差错报告报文的几种情况
    • 对ICMP差错报告报文,不再发送ICMP差错报告报文
    • 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文
    • 对具有多播地址的数据报,都不发送ICMP差错报告报文
    • 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报,不发送ICMP差错报告报
  3. ICMP询问报文有两种
    • 回送请求和回答:ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文,这种询问报文用来测试目的站是否可达以及了解其有关状态
    • 时间戳请求和回答:ICMP时间戳请求报文是请某台主机或路由器回答当前的日期和时间,时间戳请求与回答可用于时钟同步和时间测量
  4. ICMP应用
    • PING:通过发送回送请求报文来检测源主机到目的主机的链路是否有问题,目的地是否可达,以及通信的延迟情况
    • traceroute:通过发送探测报文来获取链路地址信息,即源主机可获得到目的地的每一跳路由的IP地址

八. IPV4和IPV6的区别

  1. 首部长度
    IPv4首部的选项字段允许IP首部被扩展,由此导致数据报首部长度可变,IPv6采用固定40字节长度的报头长度(称基本报头),IPv6的扩展首部放在了数据部分,路由器无权处理,从而加快了路由器的处理效率
  2. 分片/重组
    IPv6的分片与重组只能在源与目的地上执行,不允许在中间路由器进行将该功能从路由器转移到端系统,大大加快了网络中的IP转发速率。如果路由器收到IPv6数据报太大而不能转发到出链路上,则该路由器丢弃该包,并向发送发发回一个"分组太大"的ICMP差错报文,于是发送发使用较小长度的IP数据报重发数据。
  3. 首部校验和
    IPv6不进行首部校验和检查,从而更快速处理IP分组
  4. 优先级:IPv6标识数据报的优先级
  5. 协议:IPv6使用新版ICMP协议

九. 单播、广播和多播区别

  1. 单播:
    主机之间一对一的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制
    • 优点:服务器及时响应客户机的请求,服务器针对每个客户不通的请求发送不同的数据,容易实现个性化服务
    • 缺点:当客户数据流相同,服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负

  2. 广播:
    主机之间一对所有的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉
    • 优点:网络设备简单,维护简单,布网成本低廉,由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
    • 缺点:无法针对每个客户的要求和时间及时提供个性化服务,广播禁止允许在Internet宽带网上传输

  3. 组播:
    主机之间一对一组的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据,这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯
    • 优点:需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载,此协议和单播协议一样允许在Internet宽带网上传输。
    • 缺点:与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补

详解点击传送门

十. IP地址和MAC地址的区别

  1. MAC地址是硬件地址,也叫物理地址,用来定义网络设备的位置,有链路层负责
  2. IP地址是IP协议提供的一种地址格式,为互联网的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址(MAC地址)的差异

******************************* 运输层 *******************************

一. TCP和UDP区别

  1. 连接
    TCP是面向连接的传输层协议,即传输之前必须先建立连接
    UDP是无连接,传输之前不需要建立连接
  2. 服务对象
    TCP只能一对一服务
    UDP支持一对一、一对多、多对一和多对多的服务
  3. 可靠性
    TCP是可靠交付,无差错、不丢失、不重复
    UDP是进最大努力交付
  4. 拥塞控制
    TCP有拥塞控制保证数据传输安全性
    UDP没有拥塞控制,网络拥塞不会影响主机发送效率
  5. 首部开销
    TCP首部开销大,20个字节
    UDP首部开销小,8个字节(源端口、目的端口、数据长度、校验和)
  6. 应用场景
    TCP:超文本传输协议
    UDP:实时通信、视频通话

二. TCP首部字段

  1. 源端口和目的端口:各占2个字节,分别写入源端口和目的端口号
  2. 序列号:占4个字节,本报文段的第一个字节序列号
  3. 确认号:占4个字节,期望收到对方下一个报文段的第一个字节的序列号
  4. 数据偏移:占4个比特位,它指出数据起始处距离TCP报文段的起始处有段远,最大值为154字节
  5. 保留:占6个比特位,为今后使用
  6. 紧急URG:占1个比特位,当URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段有紧急数据应该尽快传送,而不要原来的排队顺序
  7. 确认ACK:占1个比特位,仅当ACK = 1 时,确认号字段才有效,当ACK = 0时,确认号字段无效
  8. 推送PSH:占1个比特位,发送方TCP把PSH置1,并立即创建一个报文段发送出去,接收方TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付接收应用进程,而不再等到整个缓存都填满了后再向上交付
  9. 复位RST:占1个比特位,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接,RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接
  10. 同步SYN:占1个比特位,在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1,因此,SYN置为1就表示这是一个连接请求或连接接受报文段,TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗掉一个序号
  11. 终止FIN:占1个比特位,用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接,TCP规定,FIN报文段即使不携带数据,它也消耗掉一个序号
  12. 窗口:占2个字节,窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口),窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)
  13. 检验和:占2字节,检验和字段检验的范围包括首部和数据这两部分,和UDP用户数据报一样,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部
  14. 紧急指针:占2字节,紧急指针仅在URG=1时才有意义,紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使
    窗口为零时也可发送紧急数据
  15. 选项:长度可变,最长可达40字节。当没有使用“选项“时,TCP的首部长度是20字节

三. TCP选项字段

  1. 窗口扩大选项:占3字节,是为了扩大窗口。由于TCP首部中窗口字段长度是16位,因此最大的窗口大小为64K字节,这对早期的网络是足够用的,但对于包含卫星信道的网络,传播时延和带宽都很大,要获得高吞吐率需要更大的窗口大小,因此需要对窗口进行补充
  2. 时间戳选项:占10字节,其中最主要的字段是时间戳值字段(4字节)和时间戳回送回答字段(4字节)时间戳选项有以下两个功能:
    第一,用来计算往返时间RTT。发送方在发送报文段时把当前时钟的时间值放入时间戳字段,接收方在确认该报文段时把时间戳字段值复制到时间戳回送回答字段。因此,发送方在收到确认报文后,可以准确地计算出RTT来
    第二,用于处理TCP序号超过232的情况,这又称为防止序号绕回PAWS,我们知道,TCP报文段的序号只有32位,而每增加232个序号就会重复使用原来用过的序号。当使用高速网络时,序列号会很快绕回

四. 为什么要规定一个最大报文段长度MSS

首先,MSS与接收窗口值没有关系,因为TCP报文段的数据部分,至少要加上40字节的首部(TCP首部20字节和IP首部20字节,这里都还没有考虑首部中的选项部分),才能组装成一个IP数据报。若选择较小的MSS长度,网络的利用率就降低(设想在极端的情况下,当TCP报文段只含有1字节的数据时,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,对网络的利用率就不会超过1/41),但反过来,若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的TCP报文段。当传输出错时还要进行重传,这些也都会使开销增大,因此,MSS应尽可能大些,只要在IP层传输时不需要再分片就行,若主机未填写这一项,则MSS的默认值是536字节长。因此,所有在互联网上的主机都应能接受的报文段长度是536+20(固定首部长度)=556字节。

五. TCP如何保证可靠性

  1. 校验和
    在发送数据之前计算检验和,并进行校验和的填充,计算方式为将发送的数据段都当做一个16位的整数,将这些整数加起来,并且前面的进位不能丢弃,补在后面,最后取反,得到校验和,接收方:收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方的进行比对
  2. 序列号、确认应答、超时重传
    数据到达接收方,接收方需要发出一个确认应答,表示已收到该数据,并且确认序号会说明它下一次需要接收的数据序列号,如果发送方迟迟未收到确认应答,那么可能是发送数据丢失,或者是确认应答丢失,这时发送方会等待一段时间进行重传,这个时间一般是2 * RTT(报文往返时间)
  3. 滑动窗口
    发送方和接受方各自维护了一个连续的允许发送的分组的窗口,窗口大小就是无需等待确认而可以继续发送数据的最大值,TCP利用窗口控制来提高传输速度,就是在一个窗口内不用等到应答才发送下一个数据,如果不使用窗口控制,每一个没收到确认应答的数据都要重发;
  4. 流量控制
  5. 拥塞控制

六. TCP流量控制

TCP首部中,专门有一个字段用来通知窗口大小。接收主机将自己可以接收数据的缓冲区大小放入这个字段中通知给发送端,于是发送端会发送不超过这个限度的数据。该大小限度就被称作窗口大小。也就是说,发送端主机会根据接收端主机的指示,对发送数据的量进行控制。当接收端缓冲区满,发送端停止发送数据,之后,在收到发送窗口非零后接收端向发送端发送通知后通信才得以继续进行。如果这个窗口的更新通知在传送途中丢失,可能会导致无法继续通信。为避免此类问题的发生,发送端主机会时不时的发送一个叫做窗口探测的数据段,此数据段仅含一个字节以获取最新的窗口大小信息

七. 糊涂窗口综合征

假如TCP接收方的缓存巳满,而交互式的应用进程一次只从接收缓存中读取1个字节(这样就使接收缓存空间仅腾出1个字节),然后向发送方发送确认,并把窗口设置为1个字节(但发送的数据报是40字节长)。接着,发送方又发来1个字节的数据(请注意,发送方发送的IP数据报是41字节长)。接收方发回确认,仍然将窗口设置为1个字节。这样进行下去,使网络的效率很低。要解决这个问题,可以让接收方等待一段时间,使得或者接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。只要出现这两种情况之一,接收方就发出确认报文,并向发送方通知当前的窗口大小。此外,发送方也不要发送太小的报文段,而是把数据积累成足够大的报文段,或达到接收方缓存的空间的一半大小

八. 拥塞控制和流量控制的区别

  1. 拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素
  2. 流量控制往往是指点对点通信量的控制,是个端到端的问题(接收端控制发送端)。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收

九. TCP拥塞控制

  1. 慢启动
    定义拥塞窗口cwnd,初始值为1,之后每次收到确认应答,拥塞窗口大小 *2

  2. 拥塞避免
    设置慢启动门限ssthresh,刚开始设为65535,当拥塞窗口大小超过慢启动门限时,拥塞窗口大小cwnd不再指数上升,而是线性增加,当拥塞发生,产生超时重传时,这时慢启动门限ssthresh设置为cwnd/2,拥塞窗口大小cwnd重置为1,重新开始慢启动

  3. 快速重传
    当发送端收到连续3个相同的ACK信号时,要在定时器超时之前重传数据,当连续收到3个应答信号,表明指示个别字段丢失,网络还没有那么拥堵

  4. 快速恢复
    在 快速重传之后使用,这时慢启动门限ssthresh设置为cwnd/2,拥塞窗口大小cwnd设置为慢启动门限大小,然后线性增长

十. TCP建立连接的三次握手

  1. 第一次握手:Client将标志位SYN置为1,随机产生一个序列号Seq = C,并将该数据包发送给Server,然后客户端进入SYN_SENT状态,等待服务器确认
  2. 第二次握手:服务器收到数据,由标志位SYN = 1得知客户端要建立连接,服务请将标志位SYN和ACK都置为1,然后Ack = C+1,并也随机产生一个序列号Seq = S,并将该数据包发送给客户端,然后服务器进入SYN_RCVD状态
  3. 第三次握手:客户端收到确认后,检查标志位ACK是否为1,Ack是否为C+1,如果正确将标志位ACK置1,Ack = S+1,并将该数据包发送给服务器,服务器收到后检查标志位ACK是否为1,Ack是否为S+1,如果正确则连接建立成功,客户端和服务端进入ESTABLISHED状态,三次握手完成

十一. TCP断开连接的四次握手

  1. 第一次握手:客户端打算关闭连接,向服务器发送FIN报文,客户端进入FIN_WAIT_1状态,此时客户端依然可以接收来自服务器的数据
  2. 第二次握手:服务器收到报文后,立即发送ACK报文给客户端,然后服务端进入CLOSE_WAIT状态,客户端收到应答后进入FIN_WAIT_2状态
  3. 第三次握手:当服务器发送完数据后,发送一个FIN报文给客户端,然后服务器进入LAST_ACK状态,等待客户端确认
  4. 第四次确认:客户端收到了服务器的FIN报文后,给服务器发送了一个ACK报文,此时客户端进入TIME_WAIT状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接,服务端收到客户端的ACK报文后,立即关闭连接

十二. 为什么建立连接要进行三次握手

  1. 同步双方的初始序列号(进行握手的目的)
    TCP 协议的通信双方, 都必须维护一个序列号, 序列号是可靠传输的一个关键因素,当客户端发送携带初始序列号的 SYN 报文的时候,需要服务端回一个 ACK 应答报文,表示客户端的 SYN 报文已被服务端成功接收,那当服务端发送初始序列号给客户端的时候,依然也要得到客户端的应答回应,这样一来一回,才能确保双方的初始序列号能被可靠的同步
  2. 阻止历史重复连接的初始化(第三次握手目的)
    为了防止已经失效的连接请求报文段突然传送到服务端,因而产生错误。例如,A发出了某个请求连接,但是该请求报文段在网络中延迟了,由于A并没有及时收到B的应答信号,于是A关闭了连接,但是此时B收到了在网络中延迟的A的请求报文,就向A发送确认报文,假定采用两次握手,当B发出确认报文时,新的连接就建立了,但A并没有建立连接的请求,也就不会理睬B发送的确认报文,但B确认为连接建立了,B的许多资源就这样浪费了

十三. 为什么TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态

  1. 为了保证客户端发送的最后一个ACK报文能够到达服务端,这个ACK报文有可能丢失,因而使处在LAST_ACK状态的服务器收不到已发送FIN报文的确认,服务器将会重传这个FIN报文段,而客户端就能在这2MSL时间段内接收到服务器端重传的FIN报文,如果不是等待2MSL时间,客户端就有可能接收不到服务端重传的FIN报文,服务端就无法正常进入CLOSED状态
  2. 经过2MSL时间,可以使本次连接持续时间内所产生的所有报文段都从网络消失,这样就可以使下一个新的连接不会出现旧的连接请求报文段

十四.

十五. 如果已经建立了连接,但是客户端突然出现故障了怎么办

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接

十六. TCP短连接和长连接的区别

  1. 短连接:客户端向服务器发送消息,服务端回应客户端,然后一次读写就完成了,这时候双方都可以发起关闭连接操作,不过一般都是客户端发起,短连接管理起来方便,建立存在的连接都是有用的连接,不需要额外的控制手段,但如果进行频繁的读写操作,导致效率低下
  2. 长连接:客户端与服务端完成一次的读写后,他们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接,对于频繁进行读写操作情况下确实提高了效率,但是在长连接的应用场景下,随着客户端连接越来越多,会导致服务器压力越来越大,服务端可采取一些策略,如关闭长时间没有读写操作发生的连接

十七. TCP粘包、拆包及解决办法

  1. 粘包现象
    TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方
  2. TCP粘包的原因
    • 发送方原因:TCP默认使用Nagle算法,该算法收集多个小分组,在一个确认到来时一起发送
    • 接收方原因:TCP将接收到的数据包保存在接收缓存里,然后应用程序主动从缓存读取收到的分组,如果TCP接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包
  3. 解决办法
    • 发送方:对于发送方造成的粘包问题,可以通过关闭Nagle算法来解决
    • 接收方:接收方没有办法来处理粘包现象,只能将问题交给应用层来处理。
    • 应用层:设定消息长度或者增加消息边界

十八. 提高网络利用率办法

  1. Nagle算法
    该算法的思路就是延时处理,使用该算法时需要满足以下两个条件中一条才可以发送数据,要么已经发送数据都已收到确认应答,要么窗口大小大于MSS或者数据大小大于MSS
  2. 延迟确认应答
    接受方收到数据后并不立即返回确认应答,而是延迟一段时间,最大延迟500ms发送确认应答
  3. 捎带应答
    在一个TCP包中既发送数据又发送确认应答

******************************* 应用层 *******************************

一. HTTP协议特性

HTTP 协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于在万维网服务器和本地浏览器之间的超文本传送协议,基于TCP/IP 通信协议来传递数据,HTTP 协议工作于客户端-服务端架构为上,浏览器作为HTTP客户端通过URL向HTTP 服务端,即WEB 服务器发送所有请求,Web 服务器根据接收到的请求后,向客户端发送响应信息

  1. 简单
    HTTP 基本的报文格式就是 header + body,头部信息也是 key-value 简单文本的形式,易于理解,降低了学习和使用的门槛
  2. 灵活和易于扩展
    HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充,同时 HTTP 由于是工作在应用层( OSI 第七层),则它下层可以随意变化
  3. 应用广泛和跨平台
    互联网发展至今,HTTP 的应用范围非常的广泛,从台式机的浏览器到手机上的各种 APP,HTTP 的应用片地开花,同时天然具有跨平台的优越性
  4. 无连接:
    无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节约服务器资源,节省传输时间
  5. 无状态:
    HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力

二. HTTP的请求报文和响应报文

  1. 请求报文
    • 内容:请求行、请求头部、空行、请求体
    • 请求行包括:请求方法字段、URL字段、HTTP协议版本字段。它们用空格分隔。例如,GET /index.html HTTP/1.1。
    • 请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔
    • 请求体: post put等请求携带的数据
  2. 响应报文
    • 内容:响应行、响应头部、空行、响应体
    • 响应行:由协议版本,状态码和状态码的原因短语组成,例如HTTP/1.1 200 OK。
    • 响应头部:响应部首组成
    • 响应体:服务器响应的数据
  3. 请求报文示例
	GET/dir/index.htm HTTP/1.1 		{请求行使用了相对URL}
	Host:www.xyz.edu.cn 			{此行是首部行的开始。这行给出主机的域名}
	Connection:close 				{告诉服务器发送完请求的文档后就可释放连接}
	User-Agent:Mozilla/5.0 			{表明用户代理是使用火狐浏览器Firefox}
	Accept-Language:cn 				{表示用户希望优先得到中文版本的文档}
									{请求报文的最后还有一个空行}

三. HTTP协议请求方法

  1. GET
    发送一个请求来取得服务器上的某一资源
  2. HEAD
    HEAD 方法和 GET 方法一样,只是不返回报文主体部分,用于确认URL的有效性及资源更新的日期时间等
  3. POST
    向指定资源提交数据处理请求(例如提交表单或者上传文件),数据被包含在请求体中,POST请求可能会导致新的资源的建立和/或已有资源的修改(如果两个请求相同,后一个请求不会把第一个请求覆盖掉。(所以Post用来增资源))
  4. OPTIONS
    用来查询服务器针对请求 URL指定的资源支持的方法
  5. PUT
    向指定资源位置上传文件(如果两个请求相同,后一个请求会把第一个请求覆盖掉(所以PUT用来改资源))
  6. DELETE
    请求服务器删除请求URL所标识的资源
  7. TRACE
    回显服务器收到的请求,主要用于测试或诊断
  8. CONNECT
    要求在与代理服务器通信时建立管道,实现用管道协议进行 TCP 通信

四. get和post区别

二者的本质都是 TCP 链接,并无区别,但是由于 HTTP 的规定以及浏览器/服务器的限制,导致它们在应用过程中可能会有所不同

  1. GET方法用于信息获取,不会修改服务器资源,是安全和幂等的,POST方法因为有可能修改服务器上的资源,所以它是不符合安全和幂等性的
  2. GET 方法只发送一个 TCP 数据包,POST 方法会产生两个 TCP 数据包,浏览器会先将请求头发送给服务器,待服务器响应100 continue,浏览器再发送请求数据,服务器响应200ok(返回数据)。这么看起来 GET 请求的传输会比 POST 快上一些,但是实际上在网络良好的情况下它们的传输速度基本相同
  3. POST 是将请求信息放置在请求数据中的,GET 请求的请求信息是放置在 URL中

详解点击传送门1、传送门2

五. HTTP首部字段

  1. 通用首部字段
    请求报文和响应报文两方都会使用的首部
  2. 请求首部字段
    从客户端向服务器端发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息
  3. 响应首部字段
    从服务器端向客户端返回响应报文时使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息
  4. 实体首部字段
    针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等与实体有关的信息
  5. 常见字段
    Host:客户端发送请求时,用来指定服务器的域名
    Content-Length:在返回数据时,表明本次回应数据长度
    Connection:常用语客户端要求服务器使用TCP持久连接
    Content-Type:用于服务器回应时告诉客户端本次数据的格式
    Content-Enconding:表明服务器返回的数据使用了什么压缩格式

六. HTTP协议返回码

  1. 1xx:指示信息,表示请求已接收,继续处理
  2. 2xx:成功,表示请求已被成功接收
  3. 3xx:重定向,要完成请求进行更进一步操作
  4. 4xx:客户端错误,请求有语法错误或请求无法实现
  5. 5xx:服务器端错误,服务器未能实现合法的请求

详解点击传送门

七. HTTP和HTTPS协议的区别

  1. HTTP协议是以明文的方式在网络中传输数据,HTTPS协议传输的数据是经过TLS加密后的,HTTPS具有更高的安全性
  2. HTTPS在TCP三次握手后,还需要进行SSL握手阶段,才可以进入加密报文传输
  3. HTTPS协议需要服务器申请证书,来保证服务器是可信的
  4. HTTP协议端口是80,HTTPS协议端口是443

八. HTTP/1.0和HTTP/1.1的区别

  1. 缓存处理
    HTTP/1.1 添加更多的缓存控制策略
  2. 带宽优化
    HTTP/1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,比如下载大文件时需要支持断点续传功能,而不是在发生断连后不得不重新下载完整的包,HTTP/1.1中在请求消息中引入了range头域,它允许只请求资源的某个部分
  3. 错误状态码的增多
    HTTP/1.0中只定义了16个状态响应码,对错误或警告的提示不够具体,HTTP/1.1 新增了24个错误状态响应码,丰富的错误码更加明确各个状态
  4. Host头处理
    HTTP/1.1支持Host头域,不在以IP为请求方标志
  5. 长连接
    HTTP/1.1支持长连接和请求的流水线处理,可以减少了建立和关闭连接的消耗和延迟,同时还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求

详情点击传送门

九. HTTP/1.1和HTTP/2.0的区别

  1. 头部压缩
    HTTP/2.0 会压缩头(Header)如果同时发出多个请求,它们的头是一样的或是相似的,那么,HTTP/2.0协议会帮你消除重复的部分,原理是采用HPACK算法,在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送字段了,只发送索引号,如果发送的字段表中没有或者字段值改变,那么发送时要加上字段值,同时对表进行更新
  2. 新的传输格式
    2.0使用二进制格式,1.0使用基于文本格式,因为二进制方式方便计算机识别,因此提高了传输效率
  3. 数据流
    HTTP/2.0 对数据包做标记,指出它属于哪个回应,每个请求或回应的所有数据包,称为一个数据流,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数,客户端还可以指定数据流的优先级,优先级高的请求,服务器就先响应该请求
  4. 多路复用
    HTTP/2.0 是可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应(最后根据每个request上的id号组合成正常的请求),解决了队头阻塞问题,降低了延迟,大幅度提高了连接的利用率
  5. 服务端推送
    HTTP/2.0 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务不再是被动地响应,也可以主动向客户端发送消息

十. HTTP/2.0和HTTP/3.0的区别

  1. HTTP/2.0存在的问题
    HTTP/2 多请求复用一个TCP连接,一旦发生丢包,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来,就会阻塞住所有的 HTTP 请求
  2. HTTP/3.0相对于HTTP/2.0改进
    • HTTP/3.0的传输层协议使用基于UDP的QUIC协议,QUIC协议有自己的一套机制可以保证传输的可靠性的,并且当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响
    • TL3 升级成了最新的 1.3 版本
    • 头部压缩算法也升级成了 QPack
    • HTTPS 要建立一个连接,要花费 6 次交互,先是建立三次握手,然后是 TLS/1.3 的三次握手。QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数

十一. 浏览器输入URL会发生什么

  1. 浏览器要将URL解析为IP地址
  2. 浏览器与目标服务器建立TCP连接
  3. 浏览器通过http协议,发起http-get报文请求,请求头中包含我们希望对请求文件的操作的信息,请求体中包含传递给后台的参数
  4. 服务器收到http请求后,后台进行处理,生成响应数据包,响应也包含两部分,响应头和相应体,响应体就是我们所请求的文件
  5. 经过网络传输,浏览器收到服务器响应数据包,浏览器开始渲染
  6. 释放TCP连接

十二. DCHP动态主机配置协议工作流程

  1. DHCP服务器被动打开UDP端口67,等待主机发来的报文
  2. 主机从UDP端口68发送DHCP发现报文(源IP地址全0,目的IP地址全1),使用网络内广播
  3. 凡收到DHCP发现报文的DHCP服务器都发出DHCP提供报文,因此主机可能收到多个DHCP提供报文
  4. 主机从几个DHCP服务器中选择其中的一个,并向所选择的DHCP服务器发送DHCP请求报文
  5. 被选择的DHCP服务器发送确认报文,从这时起,主机就可以使用这个IP地址了,然后主机根据服务器提供的租用期T设置两个计时器T1和T2,它们的超时时间分别是0.5T和0.875T
  6. 当租用期过了一半(T1时间到),主机发送请求报文要求更新租用期
  7. DHCP服务器若同意,则发回确认报文,主机得到了新的租用期,重新设置计时器
  8. DHCP服务器若不同意,则发回否认报文,这时主机必须立即停止使用原来的IP地址,而必须重新申请IP地址(回到步骤2),若DHCP服务器不响应步骤6的请求报文,则在租用期过了87.5%时(T2时间到),主机必须重新发送请求报文(重复步骤6),然后又继续后面的步骤

PS:主机可以随时提前终止服务器所提供的租用期,这时只需向DHCP服务器发送释放报文即可

十三. cookie和session区别

  1. 数据存储位置
    cookie数据存放在客户的浏览器上,session数据放在服务器上
  2. 安全性
    cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
  3. 服务器性能
    session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
  4. 数据大小
    单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,session大小取决于服务器,但比cookie大

十四. DNS解析过程

  • 首先主机会查询DNS缓存,如果查询不到就给本地DNS服务器发送DNS请求(主机到本地DNS服务器查询方式属于递归查询),本地DNS服务器收到请求后,在缓存表中查找,如果找到了就直接返回IP地址,如果查询不到就向根域名服务器发出请求,然后根据根域名服务器给出信息依次查询顶级域名服务器、权限域名服务器,直到查询到该域名的IP地址,并将该IP地址返回客户端(本地服务器查询方式属于迭代查询方式)
  • PS:DNS查询采用UDP连接

十五. URI和URL

  1. URI是一种可以用于WWW之外的高效的识别码,URI不局限于标识互联网资源,它可以作为所有资源的识别码,它被用于主页地址、电子邮件、电话号码等各种组合中
  2. URL常被用来表示互联网中资源(文件)的具体位置

PS

  1. http:后边的 “//” 没有任何意义
  2. 当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是 /index.html 或者 /default.html 这些文件,这样就不会发生混乱了

十六. 代理服务器

代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去互联网访问该资源,使得网络通信量大大减少,因而减小了访问互联网的时延

以校园网为例,描述代理服务器工作流程:

  1. 校园网的计算机中的浏览器向互联网的服务器请求服务时,就先和校园网的代理服务器建立TCP连
  2. 若代理服务器已经存放了所请求的对象,代理服务器就把这个对象放入HTTP响应报文中返回给计算机的浏览器
  3. 否则,代理服务器就代表发出请求的用户浏览器,与互联网上的源点服务器建立TCP连接,并发送HTTP请求报文
  4. 源点服务器把所请求的对象放在HTTP响应报文中返回给校园网的代理服务器
  5. 代理服务器收到这个对象后,先复制在自己的本地存储器中(留待以后用),然后再把这个对象放在HTTP响应报文中,通过已建立的TCP连接返回给请求的浏览器

****************************** 网络安全 ******************************

一. 对称加密和非对称加密的区别

  1. 对称加密
    对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥,常见的对称加密算法:DES,AES,3DES等
  2. 非对称加密
    非对称加密指的是加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密,常见的非对称加密算法:RSA,ECC
  3. 区别
    对称加密算法相比非对称加密算法来说,加解密的效率要高得多。但是缺陷在于对于密钥的管理上,以及在非安全信道中通讯时,密钥交换的安全性不能保障。所以在实际的网络环境中,会将两者混合使用

二. 报文鉴定码MAC

  1. 甲首先根据自己的明文X计算出散列H(X)
  2. 甲使用密钥对散列H(X)进行加密,得到结果即为报文鉴定码MAC

三. 数字签名流程

数字签名技术不但证明了信息未被篡改,还证明了发送方的身份,具有可验证性、不可伪造性和不可否认性

  1. 甲使用乙的公钥对明文进行加密,生成密文信息。
  2. 甲使用HASH算法对明文进行HASH运算,生成数字指纹。
  3. 甲使用自己的私钥对数字指纹进行加密,生成数字签名。
  4. 甲将密文信息和数字签名一起发送给乙。
  5. 乙使用甲的公钥对数字签名进行解密,得到数字指纹。
  6. 乙接收到甲的加密信息后,使用自己的私钥对密文信息进行解密,得到最初的明文。
  7. 乙使用HASH算法对还原出的明文用与甲所使用的相同HASH算法进行HASH运算,生成数字指纹。然后乙将生成的数字指纹与从甲得到的数字指纹进行比较,如果一致,乙接受明文;如果不一致,乙丢弃明文

四. 数字证书

包含公钥及其拥有者的标识信息,将公钥与对应实体进行绑定,能提供在Internet上对实体进行身份验证的一种权威性电子文档,由CA认证中心颁发,此证书被CA进行了数字签名。任何用户都可从可信的地方获得认证中心CA的公钥,此公钥用来验证某个公钥是否为某个实体所拥有(通过向CA查询)

五. SSL加密过程

  1. 客户端向服务器发起通信请求,并且向服务器发送以下信息:
    • 客户端支持的 SSL/TLS 协议版本,如 TLS 1.2 版本
    • 客户端生产的随机数
    • 客户端支持的密码套件列表,如 RSA 加密算法
  2. 服务器收到客户端请求后,向客户端发出响应,响应包含以下内容:
    • 确认 SSL/ TLS 协议版本,如果浏览器不支持,则关闭加密通信
    • 服务器生产的随机数
    • 确认的密码套件,如 RSA 加密算法。
    • 服务器的数字证书
  3. 客户端收到服务器的回应之后,首先确认服务器的数字证书的真实性,如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:
    • 一个随机数
    • 加密通信算法改变通知,表示随后的信息都将用会话秘钥加密通信
    • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的数据做个摘要,用来供服务端校验
  4. 服务器收到客户端的密文后,用自己的私钥进行解密,通过协商的加密算法结合三个随机数,计算出本次通信的会话秘钥。然后,向客户端发生最后的信息:
    • 加密通信算法改变通知,表示随后的信息都将用会话秘钥加密通信
    • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的数据做个摘要,用来供客户端校验

至此,整个 SSL/TLS 的握手阶段全部结束,可见握手阶段采用非对称加密方式提高安全性,数据传输阶段采用对称加密方式提高效率,接下来,客户端与服务器进入加密通信

**************************** Socket编程 ****************************

一. SYN攻击及解决办法

  1. SYN攻击
    攻击者在短时间内伪造不同 IP 地址的 SYN 报文发送至服务端,服务端每接收到一个 SYN 报文,就进入SYN_RCVD 状态,但服务端发送出去的 ACK + SYN 报文,无法得到未知 IP 主机的 ACK 应答,久而久之就会占满服务端的 SYN 接收队列(未连接队列),使得服务器不能为正常用户服务
  2. 解决办法
    • 通过修改 Linux 内核参数,控制队列大小并且在超出处理能力时,对新的 SYN 直接回 RST,丢弃连接
    • 使用SYN-cookie技术:通常服务器的初始序列号由采用随机数,但在SYN-cookies中,服务器的初始序列号是通过对客户端IP地址、客户端端囗、服务器IP地址和服务器端囗等要素进行hash运算得到cookie,当服务器遭受SYN攻击使得SYN队列满时,服务器并不拒绝新的SYN请求,而是回复cookie给客户端, 如果收到客户端的ACK包,服务器将客户端的ACK序列号减去1得到cookie比较值,并将上述要素进行一次hash运算,看看是否等于此cookie。如果相等,直接完成三次握手

二. TIME_WAIT 过多的危害及优化方式

  1. 危害
    如果服务器有处于 TIME-WAIT 状态的 TCP,则说明是由服务器方主动发起的断开请求,过多的 TIME-WAIT 状态主要的危害有两种:第一是内存资源占用;第二是对端口资源的占用,一个 TCP 连接至少消耗一个本地端口;
  2. 优化方式
    • 复用处于 TIME_WAIT 的 socket 为新的连接所用,同时需要打开对 TCP 时间戳的支持
    • 设置上限,当系统中处于 TIME_WAIT 的连接一旦超过这个值时,系统就会将所有的 TIME_WAIT 连接状态重置

本文标签: 互联网 知识点 计算机网络