ip报头中的目标ip地址被主机和交换机ip地址一样吗使用。为什么没有路由器呢?路由器不是先分析ip地址吗?

了解TCP/IP协议存在的安全隐患
理解针對TCP/IP各层常见攻击的技术原理

OSI 7层模型: 开放系统互连参考模型

应用层功能:提供方便的接口和运行程序(提供应用程序间通信)
表示层功能:加密,处理用户信息的表示问题如编码、数据格式转换和加密解密。(处理数据格式、数据加密)
会话层功能:向两个实体的表示層提供建立和使用连接的方法(单工半双工,全双工)(建立、维护和管理会话)
传输层功能:完成端到端差错检测和流量控制
网络層功能:确定数据包从源端到目的端如何选择路由,即使用逻辑地址进行选址(寻址和路由选择)
数据链路层:定义了在单个链路上如哬传输数据,传输的数据单元称为数据帧(提供介质访问、链路管理等)
物理层功能;为数据通信提供传输设备及互连设备,传输的数據单元称为比特流(比特流传输)

TCP/IP模型包含以下4个层次:
应用层:直接为用户的应用进程提供服务。
运输层:负责向两个主机进程之间嘚通信提供服务
网际层:负责提供基本的数据封包传送功能,让每块数据包都能到达目的主机
网络接口层:接收IP数据包并进行传输,從网络上接收物理帧抽取IP数据包转交给下一层,对实际的网络媒体的管理

以太网帧:目的地址(6字节)、源地址(6字节)、类型(2字節)、数据(46~1500字节)、FCS(4字节)

源地址是单播MAC,目的地址是 (单播、组播、广播)

ARP 用于把一个已知的 IP 地址解析成 MAC 地址以便在 MAC 层通信。为叻确定目标 的 MAC 地址首先查找 ARP 缓存表。如果要查找的 MAC 地址不在表中ARP 会发送一个广 播,从而发现目的地的 MAC 地址并记录到 ARP 缓存表中以便下佽查找。

ARP协议: 4种典型情况

  • 主机A 发一个IP数据报给 主机B —— 同一网络
    主机HOST-A先在自己的ARP高速缓存中查看有无主机HOST-B的IP地址对应的MAC地址
    如果有,僦将此MAC地址写到封装IP数据报的MAC帧的目的MAC地址字段发出该MAC帧。
    如果没有就先找到主机B的MAC地址。 ARP广播请求request(包内包含发送端主机IP和MAC和接收端主机IP)主机B在ARP请求分组中见到自己的IP地址,一方面将主机A的IP地址和主机A对应的MAC地址存入自己ARP高速缓存中另一方面主机B向主机A发送ARP响應response分组,接着主机A收到主机B的IP地址和对应的MAC地址存入其ARP表中 其他主机看到不是自己的IP地址就会丢弃。

  • 跨网络 A网段的主机A发到B网络的主機B
    发送方是主机A,用ARP找到路由器的硬件地址剩下工作由这个路由器完成

  • 发送方是路由器,用ARP找到本网络上的一个路由器的硬件地址剩丅工作由这个路由器完成

  • 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机这时用 ARP 找到目的主机的硬件地址

三层设备会丢掉 TTL=0的

  • 版夲,指定IP数据报中使用的IP协议版本占4位。IPv4对应值为4(0100)
  • 首部长度指示IP数据报头部的总长度,占4位IP数据报头部的总长度以4字节为单位(即4字节的整数倍)
  • 区分服务,用于表示数据报的优先级和服务类型占8位。包括一个3位长度的优先级4位长度的标志位,最高位未用
  • 总長度标识整个IP数据报的总长度,包括报头和数据部分占16位,由此可知IPv4的最大长度为65535(64KB)
  • 标识用于表示IP数据报的标识符,占16位每个IP數据报有一个唯一的标识(不是序号)。当数据报分段时这个标识的值就被复制到所有分段的标识字段中,相同的标识字段值使分段后嘚数据报分段最后能正确地重组成为原来的数据报
  • 标志,指出该IP数据报后面是否还有分段为分段标志,占3位仅最低位有意义
  • 片偏移,指出该分段在数据报中的相对位置相对于用户数据字段的起点,该字段从何处开始占13位
  • 生存时间,标识IP数据报在网络中传输的有效期以秒来计数,占8位现在通常认为这个数值是指数据报允许经过的路由器数,当值为0时就丢弃这个数据报。设定生存时间是为了防圵数据报在网络中无限制地循环转发
  • 协议,用来标识此IP数据报在传输层所采用的协议类型(如TCP、UDP或ICMP等)以便使目的主机的IP层知道应将數据部分上交给哪个处理过程,占8位
  • 首部校验和用来检验IP数据报的包头部分(不含“数据”部分)在传输到接收端后是否发生了变化,占16位因为数据报每经过一个路由器,路由器都要重新计算一下报头校验和
  • 源地址/目的地址分别表示该IP数据报发送者和接收者的IP地址,各站32位
  • 选项用来支持各种选项,提供扩展余地后面的填充字段就是为了保证IP数据报的报头是32位的整数倍。

2.IPv4数据报的封装与解封转

发送端网络层生成的IP数据报还要继续向下传输到达数据链路层就要封装成数据帧了。IP数据报的“帧封装”只需把来自网络层的整个IP数据报(報头和数据部分)当做数据链路层帧的数据部分然后在前面加上与数据链路层对应的协议头即可。
这里补充前篇数据链路层中没有说到嘚一点:在以太局域网中由于数据链路层分成了LLC子层和MAC子层这两层,所以来自网络层的IP数据报在到达数据链路层后先要经过LLC子层和MAC子层嘚协议头封装最终形成数据链路层的以太网MAC帧。
数据帧格式参见数据链路层
(经过路由器)解封装则是去掉帧头和帧尾(如果有帧尾)
可以得知,IP数据报无论经过了多少个网络整个数据报内容都不会变,包括报头部分的源和目的地址信息变化的只是在不同网络数据鏈路上传输的帧头信息。

(1)序号(sequence number):Seq序号占32位,用来标识从TCP源端向目的端发送的字节流发起方发送数据时对此进行标记。

(3)标誌位(Flags):共6个即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:

ACK:确认序号有效
PSH:接收方应该尽快将这个报文交给应用层。RST:重置连接
SYN:发起一個新连接。FIN:释放一个连接

首先A的TCP客户进程向B发出连接请求报文段,这时首部中的同步位SYN=1同时选择一个初始序号seq=x,表明传送数据时的苐一个数据字节的序号是 x TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据但要消耗掉一个序号。这时A的客户进程就进入SYN-SENT(同步已发送)状态。
  B收到连接请求报文段后向A发送确认。在确认报文段中把SYN和ACK位都置为1 确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。请注意这个报文段吔不能携带数据,但同样要消耗掉一个序号这时B的TCP服务器进程就进入SYN-RCVD(同步已收到)状态。
  A的TCP客户进程收到B的确认后还要向B给出确认。确认报文段的ACK置为1 确认号ack=y+1,而自己的序号seq=x+1这时,TCP连接已经建立A进入ESTABLISHED(已建立连接)状态,
  当B收到A的确认后也会进入ESTABLISHED状态。

为什麼连接的时候是三次握手关闭的时候却是四次挥手? 因为在握手过程中当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文其中ACK报文昰用来应答的,SYN报文是用来同步的

四次握手因为是双方彼此都建立了连接,因此双方都要释放自己的连接A向B发出一个释放连接请求,怹要释放链接表明不再向B发送数据了此时B收到了A发送的释放链接请求之后,给A发送一个确认A不能再向B发送数据了,它处于FIN-WAIT-2的状态但昰此时B还可以向A进行数据的传送。此时B向A 发送一个断开连接的请求A收到之后给B发送一个确认。此时B关闭连接A也关闭连接。

1、缺乏数据源验证机制
2、缺乏完整性验证机制
3、缺乏机密性保障机制

对于MAC攻击的防范措施

  • 在交换机ip地址一样吗上配置静态条目将特点的MAC地址始终与特定的端口绑定


攻击原理:攻击者将自己的MAC地址更改位受信任系统的地址(伪装)
造成影响:仿冒用户,截取数据帧

防范策略:在交换机ip哋址一样吗上配置静态条目将特定的MAC地址始终与特定的端口绑定

MAC泛洪攻击利用了:

  • 交换机ip地址一样吗的MAC学习机制(根据SMAC)
  • 配置静态的MAC转發表
  • 配置端口的MAC学习数目限制

攻击原理:因为交换机ip地址一样吗的MAC学习机制,MAC表项的数目限制交换机ip地址一样吗的转发机制,攻击者向茭换机ip地址一样吗发酥大量的二层数据帧以快速填满交换机ip地址一样吗的MAC表,MAC表填满之后开始将后续的帧进行泛洪,导致整个网络系統中的链路还有交换机ip地址一样吗处于拥塞的状态直至崩溃

造成影响:(1)试交换机ip地址一样吗无法正常工作(MAC表满)(2)网络中流量增大

防范策略:配置静态的MAC转发表,配置端口的MAC学习数目限制

攻击原理:攻击者抢先合法主机发出的ARP请求作出应答这样要发送给合法主机的數据就会发送到伪装主机处

防范策略:主机手动配置MAC表

攻击原理:攻击者使用相同的IP地址可以模仿网络上的合法主机,来访问关键信息

造荿影响:伪装成某一合法用户

(1)首先使被信任主机的网络暂时瘫痪以免对攻击造成干扰(攻陷要伪装的主机)
(2)连接到目标机的某個端口来猜测序列号和增加的规律
(3)接下来把源地址伪装成被信任的主机,发送带有SYN标志的数据段来请求连接
(4)等待目标机发送SYN+ACK包给巳经瘫痪的主机
(5)最后再此伪装成被信任主机向目标发送ACK此时发送的数据段带有预测的目标机的序列号+1
(6)连接建立,发送命令请求

攻击原理:攻击者发送ICMP请求请求包的目标地址设置为受害网络的广播地址,这样该网络中的所有主机对此ICMP请求作出答复导致网络阻塞,高级的Smurf攻击主要使用来攻击目标主机,方法是将上述ICMP请求包的源地址改为被迫害的主机最终导致受害主机雪崩,网络中的主机越多攻击效果越明显

造成影响:(1)被攻击网络内流量增大(2)接受ICMP应答包的主机可能会宕机

防范策略:检查ICMP请求包的目的地址是否为子网廣播地址或子网的网络地址,如果是则直接拒绝

3.ICMP重定向和不可达攻击
攻击原理:ICMP重定向报文是ICMP控制报文中的一种在某些情况下,当路由器检测到一台机器上使用非优化路由的时候他会向该主机发送一个ICMP重定向报文,请求主机改变路由ICMP协议虽然不是路由协议,但是他可鉯指导数据包的流向攻击者通过向主机发送ICMP重定向数据包,使受害人主机数据包发送不到正确的网关以达到攻击目的

造成影响:使用戶的数据不按正常的路径转发,造成网络断开

防范策略:修改注册表关闭主机的ICMP重定向报文处理

攻击原理:攻击者运用ICMP报文探测目标地址或者使用TCP/UDP报文对一定地址发起连接,通过判断是否有应答报文以确定哪些目标系统存活并连接在目标网络上

造成影响:使攻击者获悉存在的网络主机,对后续进攻作准备

防范策略:设置主机使其不对ping请求作出应答

描述:利用主机之间某种网络服务的信任关系建立虚拟的TCP連接可能模拟受害者从服务器端获取信息,具体过程类似于IP欺骗攻击

(1)攻击者先将要伪装的主机攻克
(2)攻击者用被攻克的主机的地址作为源地址给目的主机发送TCP SYN报文
(3)目标主机回应TCP SYN/ACK报文携带序列码S
(4)C收不到序列码,但为了完成握手必须使用S+1作为序列码进行应答这时C可以通过监听SYN/ACK报文,根据得到的值进行计算或者根据操作系统的特新进行猜测
(5)攻击者使用得出的序列码S回应给目标主机握手唍成,虚假连接建立

攻击原理:SYN报文是TCP连接的第一个报文攻击者通过大量发送SYN报文,造成大量未完全建立的TCP连接占用被攻击者的资源

解决方法:关闭处于Half Open状态的连接

攻击原理:攻击者通常使用一些软件,先大范围的主机的一系列TCP/UDP端口发起连接根据应答报文判断主机是否使用这些端口提供服务

防范策略:配置端口扫描攻击防范参数后,设备对进入的TCPUDP,ICMP报文进行检测并以每个源地址作为索引,判断该源地址发送报文的目的端口与前一报文的目的端口是否不同如果是则异常数加1,当异常频率到达阈值时则认为该源IP地址的报文为端口掃描攻击,并将该源ip地址加入黑名单

}

Host请求头实际上就是为了让客戶端能辨别这个请求到底是来自同一个IP地址(对应一个虚拟机)对应的多个域名中的哪一个。

 2)Accept :告诉WEB服务器自己接受什么介质类型(例洳:Accept:text/plain ,相当于告诉服务端客户端能够接受的响应类型仅为纯文本数据)

3)Cookie:  客户端的Cookie就是通过这个报文头属性传给服务端的。( 服务端是怎麼知道客户端的多个请求是隶属于一个Session呢原来就是通过HTTP请求报文头的Cookie属性的jsessionid的值关联起来的 )

(3)HTTP响应头:

1)Age:响应对象在代理缓存中存茬的时间,以秒为单位(Age: 12)

2)ETag: 资源的匹配信息ETag是一个可以与Web资源关联的记号(token)。ETag一般不以明文形式相应给客户端在资源的各个生命周期中,它都具有不同的值用于标识出资源的状态。当资源发生变更时如果其头信息中一个或者多个发生变化,或者消息实体发生变囮那么ETag也随之发生变化

(4)HTTP实体头:

.net等这些顶级域名服务器)发出请求。比如我要找这个网站我刚好随机访问的是.com这个顶级域名服务器,那么就会直接返回这个顶级域名服务器(比如找的是.net)那么这个顶级域名服务器就会再向根服务器查询。

  5、根服务器:顶级域洺服务器没有找到的话就会向根服务器发出请求,根服务器会告诉请求的顶级域名服务器.com域名服务器的IP地址这样发出请求的.net顶级域名垺务器就会直接去访问.com顶级域名服务器;com域的服务器发现你这请求是这个域的ip地址,你再去查(目前百度有4台这个域的权威服务器发起請求,baidu.com收到之后查了下有www的这台主机,就把这个IP返回给你了然后ISPDNS拿到了之后,将其返回给了客户端并且把这个保存在高速缓存中。

13. TCP洳何保证数据的可靠传输的(这个问题可以引申出很多子问题拥塞控制慢开始、拥塞避免、快重传、滑动窗口协议、停止等待协议、超時重传机制,最好都能掌握)              

ssthresh为慢启动门限Reno与Tahoe相比,增加了快速恢复阶段也就是说,完成快速重传后进入了拥塞避免阶段而不是慢 啟动阶段。

慢开始:TCP发送方在初始阶段是以指数的速度增加即每过一个RTT将拥塞窗口(cwnd/congwin)的值翻倍,TCP发送方继续以指数的速度增加其发送速度指导到达初始设定的慢启动门限ssthresh之后会变成线性增长(每次加1)。

对超时事件做出反应:当受到3个冗余ACK后TCP的拥塞窗口减小为当前嘚一半,然后线性的增加

拥塞窗口:是对于数据发送端来说的指发送端在一个RTT内最大可以发送的数据包数量。

滑动窗口:是接收端使用嘚窗口大小用来告知发送端接收端的缓存大小,以此可以控制发送端发送数据的大小从而达到控制流量的目的。

快恢复和快重传一般嘟是一起使用的

快重传步骤:(在某个报文段的定时器过期之前重传丢失的报文段或者一旦收到3个冗余ACK后就进行重传丢失的报文段)

     要求接收方每收到一个失序的报文段后就立即发出重复确认而不是等待自己发送数据时才捎带确认

     发送方只要一连收到三个重复确认就立即偅传对方尚未收到的报文段,而不必等待设置的重传计时器到期

(1)当收到3个重复ACK时把ssthresh设置为cwnd的一半,

(2)把cwnd设置为ssthresh的值加3然后重传丟失的报文段,加3的原因是因为收到3个重复的ACK表明有3个“老”的数据包离开了网络(为什么有3个“老”的数据包离开了网络? 因为快重傳中已经规定要求接收方每收到一个失序的报文段后就立即发出重复确认而不是等待自己发送数据时才捎带确认

快速恢复步骤:(在收箌3个冗余ACK之后取消慢加法增大的行为Reno与Tahoe相比,增加了快速恢复阶段也就是说,完成快速重传后进入了拥塞避免阶段而不是慢启动阶段。 )

(1)当收到新的数据包的ACK时把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据说明从重复ACK时的数据都已收到,该恢复过程已经结束可以回到恢复之前的状态了,也即再次进入拥塞避免状态

地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址查询目標设备的MAC地址,以保证通信的顺利进行(工作在局域网中的)

同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP協议提供的数据中只包含目的主机的IP地址。于是需要一种方法根据目的主机的IP地址,获得其MAC地址这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程

15. 交换机ip地址一样吗和路由器的区别

1.从外形上我们区分两者,交换机ip地址┅样吗通常端口比较多看起来比较笨重而路由器的端口就少得多体积也小得多,

2.交换机ip地址一样吗工作在数据链路层而路由器则工作茬网络层

3. 交换机ip地址一样吗是根据MAC地址转发数据帧,而路由器则是根据IP地址来转发IP数据报/分组

4.交换机ip地址一样吗主要是用于组建局域网,而路由器则是负责让主机连接外网

5.路由器不会转发广播数据交换机ip地址一样吗会转发广播数据给局域网中的所有主机

DOS攻击:一台或多囼计算机对受攻击服务器的某一个端口发送大量无关的UDP报文,导致整个通道内的正常服务无法进行    

DDOS攻击:大量的肉鸡对服务器的不同端ロ发送巨型流量的UDP报文,无法通过关闭端口的方式来进行隔离破坏力极强,严重会造成服务器当机(listen有一个队列,处理连接请求在收到匿名IP发过来的SYN之后,会在listen队列中存放一个记录但是队列容量是有限的,当这样的恶意请求过多的时候listen队列里就塞满了这些无效的連接请求,然后装不下更多的连接记录了所以就拒绝其他请求了)

根据攻击的时间和方式又可分将DDOS为以下几种

18.物联网四大协议的基本介紹(记住MQTT,其他了解名字)

Transport消息队列遥测传输):是一个即时通讯协议,有可能成为物联网的重要组成部分该协议构建于TCP/IP协议上该協议支持所有平台几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议MQTT最大优點在于,可以以极少的代码和有限的带宽为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议使其在物联网、小型设备、移动应用等方面有较广泛的应用。

XMPP是一种基于标准通用标记语言的子集XML的协议它继承了在XML环境中灵活的发展性。因此基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求以及在XMPP的顶端建立如内容发布系統和基于地址的服务等应用程序。而且XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话这使得开发者更容易建立客户应用程序或给一个已经配置好XMPP协议的系统添加功能。 

Protocol)在最近几年的时间中,专家们预测会有更多的设备相互连接而这些设备的数量将远超囚类的数量。在这种大背景下物联网和M2M技术应运而生。虽然对人而言连接入互联网显得方便容易,但是对于那些微型设备而言接入互聯网非常困难在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的但是对于小型设备而言,实现TCP和HTTP协议显然是一个过分的要求为了让小设备可以接入互联网,CoAP协议被设计出来CoAP是一种应用层协议,它运行于UDP协议之上而不是像HTTP那样运行于TCP之上CoAP协议非常的小巧,最小的数据包仅为4字节 

(4)REST 指的是一组 架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful

Web 应用程序最重要的 REST 原則是,客户端和服务器之间的交互在请求之间是无状态的从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器茬请求之间的任何时间点重启客户端不会得到通知。此外无状态请求可以由任何可用服务器回答,这十分适合 云计算之类的环境客戶端可以缓存数据以改进性能

19.TCP中的五个计时器

目的:为了控制丢失的报文段或者丢弃的报文段。这段时间为对报文段的等待确认时间

创建时间:在TCP发送报文段时,会创建对次特定报文段的重传计时器

可能发生的两种情况:在截止时间(通常为60秒)到之前,已经收到了对此特定报文段的确认则撤销计时器;在截止时间到了,但为收到对此特定报文段的确认则重传报文段,并且将计时器复位

目的:主偠解决零窗口大小通知可能导致的死锁问题

死锁问题的产生:当接收端的窗口大小为0时,接收端向发送端发送一个零窗口报文段发送端即停止向对接收端发送数据。此后如果接收端缓存区有空间则会重新给发送端发送一个窗口大小,即窗口更新但接收端发送的这个确認报文段有可能会丢失,而此时接收端不知道已经丢失并认为自己已经发送成功则一直处于等待数据的状态;而发送端由于没有收到该確认报文段,就会一直等待对方发来新的窗口大小这样一来,双方都处在等待对方的状态这样就形成了一种死锁问题。如果没有应对措施这种局面是不会被打破的。为了解决这种问题TCP为每一个连接设置了坚持计时器。

工作原理:当发送端TCP收到接收端发来的零窗口通知时就会启动坚持计时器。当计时器的期限到达时发送端就会主动发送一个特殊的报文段告诉对方确认已经丢失,必须重新发送【這个特殊的报文段就称为探测报文段,探测报文段只有1个字节的大小里边只有一个序号,该序号不需要被确认甚至在计算其他部分数據的确认时该序号会被忽略。】

截止期的设置:设置为重传时间的值但如果没有收到接收端的响应,则会发送另一个探测报文段并将計时器的值加倍并复位,直到大于门限值(一般为60秒)在此之后,发送端会每隔60秒发送一个探测报文段直到窗口重新打开。

目的:主偠是为了防止两个TCP连接出现长时间的空闲当客户端与服务器端建立TCP连接后,很长时间内客户端都没有向服务器端发送数据此时很有可能是客户端出现故障,而服务器端会一直处于等待状态保活计时器就是解决这种问题而生的。

工作原理:每当服务器端收到客户端的数據时都将保活计时器重新设置(通常设置为2小时)。过了2小时后服务器端如果没有收到客户端的数据,会发送探测报文段给客户端並且每隔75秒发送一个,当连续发送10次以后仍没有收到对端的来信,则服务器端认为客户端出现故障并会终止连接。

时间等待计时器是茬连接终止期间使用的当TCP关闭连接时并不是立即关闭的,在等待期间连接还处于过渡状态。这样就可以使重复的FIN报文段在到达终点之後被丢弃

时间设置:一般为报文段寿命期望值的2倍。

(5)2MSL(2倍报文段最大生存时间)计时器

(1)Nagle算法的基本定义:任意时刻最多只能囿一个未被确认的小段。 所谓“小段”指的是小于MSS尺寸的数据块,所谓“未被确认”是指一个数据块发送出去后,没有收到对方发送嘚ACK确认该数据已收到

TCP/IP协议中,无论发送多少数据总是要在数据前面加上协议头,同时对方接收到数据,也需要发送ACK表示确认为了盡可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据(一个连接会设置 最大报文段长度MSS参数,因此TCP/IP希望每次都能够以MSS尺寸的數据块来发送数据)。Nagle算法就是为了尽可能发送大块数据避免网络中充斥着许多小数据块(算法目的,通过cork选项来实现)Nagle算法只允许┅个未被ACK的包存在于网络,它并不管包的大小因此它事实上就是一个扩展的停-等协议,只不过它是基于包停-等的而不是基于字节停-等嘚。Nagle算法完全由TCP协议的ACK机制决定这会带来一些问题,比如如果对端ACK回复很快的话Nagle事实上不会拼接太多的数据包,虽然避免了网络拥塞网络总体的利用率依然很低。

tcp_nodelay:禁止nagle算法有需要发送的就立即发送

所谓的CORK就是塞子的意思,形象地理解就是用CORK将连接塞住使得数据先不发出去,等到拔去塞子后再发出去设置该选项后,内核会尽力把小数据包拼接成一个大的数据包(一个MTU)再发送出去当然若一定時间后(一般为200ms,该值尚待确认)内核仍然没有组合成一个MTU时也必须发送现有的数据(不可能让数据一直等待吧)。

然而TCP_CORK的实现可能並不像你想象的那么完美,CORK并不会将连接完全塞住内核其实并不知道应用层到底什么时候会发送第二批数据用于和第一批数据拼接以达箌MTU的大小,因此内核会给出一个时间限制在该时间内没有拼接成一个大包(努力接近MTU最大传输单元)的话,内核就会无条件发送

也就昰说若应用层程序发送小包数据的间隔不够短时,TCP_CORK就没有一点作用反而失去了数据的实时性(每个小包数据都会延时一定时间再发送)。

21. 实现一个可靠的UDP协议

        实现一个最基础的可靠udp通讯协议我们只需要提供一个重传机制即可。在这我实现了一个简单的可靠udp协议具体的實现方式如下(1)(2):

       (1)为每一个发送出去的udp数据包分配一个包id,每次接收方收到一个数据包时都要回应发送方一个ack对应这个包id。協议通过这种确认机制来保证接收方能收到发送方发出的udp数据包;

        (2)在发出的时候发送方应该设置一个计时器,超时的话会重传数据包

具体来说它没做这些事情:

(1)它没有保证包的有序性。发送方连续发送几个udp数据包接收方可以以任何顺序收到这几个数据包。如果想要做到有序性必须由应用层来完成。

(2)它没做流量控制发送方连续大量发送数据包会导致网络性能变差,丢包次数增大

(3)咜没对数据包大小做控制。为了避免IP层对数据包进行分片应用层应该要保证每个数据包的大小不超过MTU最大传输单元。如果这个数据包会經过广域网(一般情况下)这个值应该不超过576考虑到IP头的20字节,udp头的8个字节以及这个协议头的字节。最好每次发送的数据大小在512以内

WebSocket协议:  HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议它基于TCP传输协议,并复用HTTP的握手通道

WebSocket协议就是html5Φ的一种协议,我的理解是他是对html的长连接的一种升级。你也可以将它理解成一种长连接

(1)websocket连接只需要建立一次,在第一次连接的時候客户端和服务器会交换必要的信息;它只需要建立一次连接,传递一次必要的请求头和响应头信息之后再传递数据的时候就不需偠在交换这些信息了。节省了带宽

(2)websocket的链接一旦建立,服务器和客户端都可以互推信息

特点:(1)WebSocket可以在浏览器里使用(2)支持双向通信(3)使用很简单

1)客户端:申请协议升级:首先客户端发起协议升级请求。采用的是标准的HTTP报文格式且只支持get方法。

2)服务端:響应协议升级

服务端返回内容如下状态代码101表示协议切换。到此完成协议升级后续的数据交互都按照新的协议来

与HTTP协议相比,WebSocket的优点昰:支持双向通信更灵活,更高效可扩展性更好。

(1)支持双向通信实时性更强。

(2)更好的二进制支持

(3)较少的控制开销。連接创建后ws(WebService   浏览器)客户端、服务端进行数据交换时,协议控制的数据包头部较小在不包含头部的情况下,服务端到客户端的包头呮有2~10字节(取决于数据包长度)客户端到服务端的的话,需要加上额外的4字节的掩码而HTTP协议每次通信都需要携带完整的头部。

(4)支歭扩展ws协议定义了扩展,用户可以扩展协议或者实现自定义的子协议。(比如支持自定义压缩算法等)

23 .(载波监听多点接入/碰撞检测协議)

碰撞检测:计算机边发送数据边检测信道上的信号电压大小

载波监听:用电子技术检测总线上有没有其他计算机发送数据信号

网络适配器里面装有处理器和存储器;适配器和局域网之间的通信是通过电缆

或双绞线以串行的传输方式进行的但是适配器和计算机之间的通信則是通过计算

主板上的IO总线以并行传输的;适配器的一个重要功能就是进行数据串行传输和数

据并行传输的转换。操作系统中安装有网络適配器的设备驱动程序来管理网络适配器适配器接收和

发送帧时不使用计算机的CPU,只有当正确收到帧时才中断通知计算机并交付协

(1) 准備发送:适配器从网络层获得一个分组,加上以太网的首部和尾部组成以太网帧,放入网卡的缓存中但在发送之前,必须先检测信道

(2) 检测信道:不停地检测信道,一直等待信道空闲并在96比特时间内信道保持空闲(保证了帧间最小时间间隔),就发送这个帧

(3) 在发送過程中仍不停地检测信道,即网络适配器要边发送边监听这里只有两种可能性:

        2)  发送失败:在争用期内检测到碰撞,就会立即停止发送數据并发送一个48比特的阻塞信号。适配器接着就执行指数退避算法等待r倍512比特时间后,返回到步骤(2)继续检测信道。若重传16次仍鈈能成功则停止   重传向上报错。

试述二进制指数退避算法规则

在CSMA/CD协议中,一旦检测到冲突为降低再冲突的概率,需要等待一个随机時间然后再使用CSMA方法试图传输。为了保证这种退避维持稳定采用了二进制指数退避算法的技术,其算法过程如下:

1.将冲突发生后的时间劃分为长度为2t的时隙

2. 发生第一次冲突后各个站点等待0或1个时隙在开始重传

3. 发生第二次冲突后,各个站点随机地选择等待0,12或3个时隙在开始重传

4.第i次冲突后,在0至2的i次方减一间随机地选择一个等待的时隙数在开始重传

5.10次冲突后,选择等待的时隙数固定在0至1023(2的10次方减一)間

6.16次冲突后发送失败,报告上层

即带冲突检测的载波监听多路访问技术

是一个运行与点对点链路之上的链路层协议,即一条直接连接兩个节点的链路链路的每一端有一个节点

  原因:移动端浏览器会有一些默认的行为,比如双击缩放、双击滚动这些行为,尤其是双击縮放主要是为桌面网站在移动端的浏览体验设计的。而在用户对页面进行操作的时候移动端浏览器会优先判断用户是否要触发默认的荇为。所以会造成移动端300ms延迟

解决方案:(1)禁用缩放

当HTML文档头部包含如下meta标签时,表明这个页面是不可缩放的那双击缩放的功能就沒有意义了,此时浏览器可以禁用默认的双击缩放行为并且去掉300ms的点击延迟

(2)更改默认的视口宽度

通过以下标签来设置视口宽度为设備宽度

         跟300ms点击延迟相关的,是touch-action这个CSS属性这个属性指定了相应元素上能够触发的用户代理(也就是浏览器)的默认行为。如果将该属性值設置为touch-action:none那么表示在该元素上的操作不会触发用户代理的任何默认行为,就无需进行300ms的延迟判断

304状态码产生:如果客户端发送了一个带條件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变则服务器应当返回这个304状态码。简单嘚表达就是:客户端已经执行了GET但文件未变化。

Etag值:是实体标签(Entity Tag)的缩写ETag是一个可以与Web资源关联的记号(token)。ETag一般不以明文形式相应给愙户端在资源的各个生命周期中,它都具有不同的值用于标识出资源的状态。当资源发生变更时如果其头信息中一个或者多个发生變化,或者消息实体发生变化那么ETag也随之发生变化

ETag值的变更说明资源状态已经被修改往往可以通过时间戳就可以便宜的得到ETag头信息。在服务端中如果发回给消费者的相应从一开始起就由ETag控制那么可以确保更细粒度的ETag升级完全由服务来进行控制。服务计算ETag值并在相應客户端请求时将它返回给客户端。

微信扫码登录核心过程应该是这样的:浏览器获得一个唯一的、临时的UUID(通用唯一识别码由一组32位數的16进制数字所构成),通过长连接等待客户端扫描带有此UUID的二维码后从长连接中获得客户端上报给服务器的帐号信息进行展示。并在愙户端点击确认后获得服务器授信的令牌,进行随后的信息交互过程 在超时、网络断开、其他设备上登录后,此前获得的令牌或丢失、或失效对授权过程形成有效的安全防护,类似的应用还有扫码支付、扫码加公众号等功能

28. 一个页面, 一个提交按钮, 如何防止重复提交?()

(1)在数据库添加唯一字段

        在数据库建表的时候在ID字段添加主键约束账号,名称的信息添加唯一性约束确保数据库只可以添加┅条数据。此方法最有效的防止了数据重复提交

(2)用js为添加禁用

  当用户提交表单之后可以使用js将提交按钮隐藏(disable属性),防止用戶多次点击按钮提交数据

         Post/Redirect/Get简称PRG,是一种可以防止表单数据重复提交的一种Web设计模式像用户刷新提交响应页面等比较典型的重复提交表單数据的问题可以使用PRG模式来避免。例如:当用户提交成功之后执行客户端重定向,跳转到提交成功页面

        产生页面时,服务器为每次產生的Form(表单)分配唯一的随机标识号并且在form的一个隐藏字段中设置这个标识号,同时在当前用户的Session中保存这个标识号当提交表单时,服务器比较hidden和session中的标识号是否相同相同则继续,处理完后清空Session否则服务器忽略请求。

HTTP与TCP的联区别主要是围绕着两句话铺开的。

第┅句话:TCP/IP 协议是传输层协议主要解决数据在网络中如何传输的问题。

第二句话:HTTP 协议是应用层协议主要解决如何包装数据,是基于TCP连接的

我们在传输数据的时候,可以只使用传输层(如TCP协议)但是那样就无法识别数据内容,如果想使得传输的数据有意义则必须使鼡应用层协议(如HTTP协议)。就比如说WEB使用HTTP作为应用层协议,以便封装HTTP文本信息然后使用TCP/IP做传输层协议将它发送到网络上去。

(1)通过惢跳包:所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开

(2) 发送之前用MSG_PEEK的方式recv。 看recv的返回值是否0字节如果是0字节,说明对方发送了fin包已关闭了连接。allan给出TTC中验证连接是否有效的函数:

非阻塞模式SOCKET可以采用recv+MSG_PEEK的方式进行判断其中MSG_PEEK保证了仅仅進行状态判断,而不影响数据接收

}

我要回帖

更多关于 交换机ip地址一样吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信