计算机网络常识

计网常识

计算机网络
1、OSI7层网络模型:应用层、表示层、会话层、运输层、网络层、链路层、物理层
2、TCP/IP四层网络模型:应用层、运输层、网际层、接口层
综合OSI与TCP/IP模型,学习五层网络模型:
从上向下架构:应用层、运输层、网络层、链路层、物理层
链路层:
3、MTU
答:以太网中1500(字节)
4、MAC地址
网络层:
5、地址解析协议
ARP 可以将IP地址解析成Mac地址:
第一步:检查本地主机路由表中是否有IP-Mac的匹配
第二步:如果没有,就向本地网络中发送广播帧,获取本地网络中其他主机的IP-Mac,如果有,更新本地主机路由表;如果没有,则丢弃ARP请求.
6、为啥有IP地址还需要MAC地址?同理,为啥有了MAC地址还需要IP地址?
全世界有2的48次方个Mac地址,mac地址是标记每一台主机的唯一标识,如果只用MAC地址通讯,那么光保存这些地址就要256tb的空间;所以人们把网络划分成许多子网,用IP地址来标记每一个子网,这样传递数据就只用传递至每个子网,剩下的分配交由内部处理,大大减轻了寻址的困难程度;
IP寻址只完成了数据传递的前半程,当数据到达由IP标记的对应子网之后,依然需要通过mac地址来区分主机
总而言之,IP就像邮编,对应地区住址,而mac则是身份证号,标记地区里的每个人.
7、网络层转发数据报的流程
答:将数据包最终一定能交付至目标网络的路由器.发往路由器,由路由器确定下一跳,循环往复,直到发到目标网络所在的路由器,尝试向目标主机直接交付.
8、子网划分、子网掩码
答:
IP={<网络号>,<子网号>,<主机号>}:三级IP
|—网络主机号—| :二级IP
子网:子网是一个物理网络单位内部的划分,外部网络是看不见的,因为对外依旧表现为一个网络;从网络主机号划分出若干位作为子网号;其他网络发向本网络中某个主机的信息会传向本网络绑定的路由器,再由路由器确定子网号,主机号,用于定位目标子网中的目标主机.
子网掩码:虽然内部划分好了子网,但是路由器并不能通过外部数据包的目标IP来确定对应的子网:
如将前16位设为主机网络号,中间8位设为子网号,后八位设为主机号:
那么192,168,3,10则对应192.168主机的3号子网中的10号主机,但是路由器只收到了192.168.3.10的目标地址,其他的划分一概不知,所以创造一个子网掩码,255.255.255.0,将这个32位地址与IP进行与运算,前24位不变,最后对应主机号的位置就会变为0,即192.168.3.0,正是3号子网对应的IP地址.
所以,子网掩码是用来和目标IP做与运算,确定子网地址的
a类地址只有前八位是网络号,所以只有前八位需要保留,子网掩码255.0.0.0
b类地址有16位网络号,子网掩码255.255.0.0
c类地址有24位网络号,子网掩码255.255.255.0
9、网络控制报文协议ICMP
答:ICMP封装于IP数据报中,分为ICMP差错报文和ICMP询问报文
前四个字节是统一的头部格式,:类型,代码,校验和;接着四个字节是ICMP报文的类型,然后才是数据部分.

10、ICMP应用举例:PING、traceroute
答:PING用来测试两台电脑的连通性,发送的是询问报文,含时间戳请求
Traceroute是用来跟踪一个分组从源头到目的地的路径.
运输层:
11、TCP与UDP的区别及应用场景
答:三次握手:
客户端 SYN = 1,seq = x —> 服务端
服务端 SYN = 1,ACK = 1,seq=y ask= x+1 —> 客户端
客户端 ACK = 1,seq=x+1 ask=y+1 —> 服务端

四次挥手:
客户端 FIN = 1,seq=u —> 服务端
客户端申请断开,并进入FIN-WAIT1阶段
服务端 ACK = 1,seq=v,ask=u+1 —> 客户端
服务端收到申请并通知上层应用,进入CLOSE-WAIT阶段,客户端收到服务端回复,进入FIN-WAIT2阶段
服务端 —数据传输–> 客户端
服务端将没有传完的信息传递完毕
服务端 FIN = 1,ACK = 1,seq=w,ask=u+1 —> 客户端
服务端数据输送完毕,可以断开,并进入LAST-ACK阶段
客户端 ACK = 1,seq = u+1,ack=w+1 —> 服务端
客户端收到断开报文并发送断开报文,进入断开前最后的等待阶段TIME-WAIT
服务端收到断开报文后断开.

答:
12、TCP首部报文格式(SYN、ACK、FIN、RST必须知道)
答:SYN是同步位,在建立连接的时候用来同步,为1时说明报文是连接请求或连接接受报文;当SYN=1,ACK=0说明是一个请求连接报文,如果同意则回复:SYN=1,ACK=1
ACK是确认位,建立连接之后所有报文都要置1
RST是复位,当tcp连接出现重大错误的时候会申请释放连接,重新建立.
PSH是推送位,当连接一方发出报文后希望立即获得回复的时候,将PSH置1,这样接收端就不会等缓冲区满了再交付上层处理,而是立即将缓冲区全部交付
FIN是终止符号,当FIN=1时,说明此报文的发送方已经将数据全部发送完毕了,并且要求释放连接.
13、TCP滑动窗口原理
答:接收端一开始默认的接受窗口是根据链路宽带决定的,在握手回信中会告知发送发准确的窗口大小,然后发送方的发送窗口也会改成一致的
如果发送过程中丢包(设丢了1001-2000),接收窗口就不会向前移动,不断发送ack1001,当发送方连续接到三个后,就会触发重传,在此过程中发送方发送的数据也会被接收,只是接受窗口不会移动
如果接受回报过程中丢包(设丢了ack2001),发送放虽然没接收到ack2001的包,但是如果接收到ack3001或之后的包,就能确定1-3000的数据都已经正常送达,就不会重新发送了
根据网络状况与接收端的接受能力,每次回报的窗口数都可以改变,这样就能控制传输的速度,进而完成流量控制
14、TCP超时重传时间选择
答:tcp不是应用层的高层协议,每时每刻都有面向不同应用的数据需要传输,因此tcp无法等待过长时间,使网络长时间闲置,同理,如果等待时间过短,当网路并不畅通的时候又会造成极大的负荷.因此,根据网路实时情况计算超时重传时间就十分必要
新RTTs = (1-a)RTTs+a*(RTT样本)
新RTTd = (1-b)RTTd+b*(RTTs - RTT样本)
RTO = RTTs+4*RTTd
RTT是报文一次往返的时间,RTTs是加权后的往返时间,a是权重,一般定为0.125
RTTd是RTT偏差的加权值,初始定位0.5RTTs,b一般位0.25
RTO则是超时重传时间,粗略计算为两次往返的时间
15、TCP流量控制
答:发送方会根据接收方接收窗口的大小来决定每次发送的数据量,当接收方的确认报文中窗口为0时,意味着接收方暂时不需要数据了,发送方就会打开一个定时器,即每隔一段时间,就向接收方发送一段数据,如果回报中窗口还是0,就刷新计时器,直到回文中窗口不为0,才正常发送数据.
16、TCP拥塞控制(一定要弄清楚与流量控制的区别)
答:拥塞控制一般有四种
慢开始,拥塞控制,快重传,快恢复
发送方维护一个拥塞窗口cwnd,当网络没有出现拥塞时,就增大一点;是否拥塞看是否有超时重传现象,发送方将cwnd作为发送窗口的取值并设置一个拥塞门限ssthresh
1.慢开始:设置cwnd=1,当收到回复后,将cwnd翻倍;当cwnd大于等于门限ssthresh时,进入拥塞避免
2.拥塞避免:cwnd过了门限后,每完成一次:发送–回复 的轮次后,就让cwnd+=1,直到发生超时重传了,就重新设置cwnd和ssthresh的值:设cwnd=30后发生了超时重传,就让cwnd = 0,ssthresh = 15(cwnd顶峰的一般),重新开始传输过程.当cwnd<ssthresh的时候还是慢开始.如果在慢开始阶段就发生了超时重传,那么同上述过程一样,重新设置两数的值
3.快速重传:当发送1号数据后,发送端就在等待1号确认报文,但是在等待过程中同时也可以发送2号,3号,4号及之后的数据.如果1号3号数据报文收到了,但是2号数据报文却遗失了,接收端就会发送2号申请报文,如果发送端没有回复,接收端就会不断超时重传.当接收端连续三次向发送端发送申请报文后,接收端就会暂停发送之后的数据包,先发送2号数据包,这段时间中,接收端不止在等待2号包,同时也已收到发送端发送的其他数据包(3,4,5,6,7),当2号数据包到达,接收端的滑动窗口就会直接滑倒7号数据包,发送7号数据包已接收的确认报文,发送端也就会正常发送8号数据包了.
4.快速恢复:当快速重传完成后,因为快速重传发生在连续三个重复确认之后,那么就认为已经有三个包离开了网络空间,也就说明可以多发3个包了,所以将cwnd设为ssthresh+3,这样快速恢复了重传的速度。
17、TCP三次握手及状态变化。为啥不是两次握手?
答: 第三次握手是必须的,主要考虑到这种情况:客户端向服务器发出第一次握手的请求,但是网络延迟严重,没有及时到达,所以客户端又发出了一次连接请求,这次正常到达了;当完成一次通信断开连接之后,滞留在网络中的第一次请求又传到了服务器端处,服务器正常向客户端发出确认报文,这个时候客户端就能判断出连接是错误的,并用第三次握手的机会通知服务端.

18、TCP四次挥手及状态变化。为啥不是三次挥手?
答:因为TCP是全双工通信,数据是双向传输的,第一次挥手是一方主动申请释放连接,但此时另一方很可能还有数据没有发送完成,所以第二次挥手表明(我知道你想断开连接了,但是等我一下),等数据传输完毕,在进行第三次挥手禀明(我也准备好断开了,请你断开吧),然后申请端确认数据接收完毕之后就可以第四次挥手通知另一方(数据接收完毕,我已断开).
19、TCP连接释放中TIME_WAIT状态的作用
答:TIME-WAIT阶段是必须的:当服务器传完剩余数据,并向客户端发送FIN=1ACK=1的断开报文后,如果没有接到客户端的ACK报文就会超时重传,这个时候如果客户端已经关闭了,服务器就永远无法断开了;
20、SYN泛洪攻击。如何解决?
答:SYN是同步位,意味着接收端一旦接到SYN=1的报文就会初始化连接并发送SYNACK报文等待响应,如果大量的SYN报文发送,就会对服务器造成大量负载
所以当服务器第一时间收到SYN报文的时候,并不会建立连接,而是把该SYN报文的源IP地址与目的IP地址通过散列函数生成一个特殊的序号,成为cookie.这个cookie并不做任何记录,只作为一个SYNACK报文的序号进行发送.如果连接申请是合法的,那么必然会发送一个ACK报文,此报文的seq一定为上一个cookie+1,因为服务器并没有维护记录SYN报文,所以将ACK报文的源IP与目的IP重新通过散列函数计算得cookie,+1后与报文的序号对比,相等就可以建立连接.
21、TCP粘包
答:TCP粘包发生在发送方和接收方
发送方如果使用Nagle算法,就会把多个小包合成一个打包一起发送,造成数据粘连;接收方收到数据会先将数据暂存在缓冲中,当不同数据将缓存占满,就会在缓存中粘连在一起
对于发送发,可以关闭Nagle算法,接收方只能交由应用层处理:将数据格式化,在应用层封包,包头说明包的长度\数据的类型,就能区分不同数据了
UDP有数据边界,一次只接收一个包,不会发生数据粘连.

22、TCP心跳包
答:事实上,有很多tcp连接是需要长时间客户端服务端交互的,中间总有空闲时间,所以服务端要保证客户端没有发送信息是处于闲置阶段而不是”掉线”了,就像心跳的起伏.所以当客户端连接上服务端后,服务端需要维护一个字典,用来记录连接的socket,定时发送确认存活就行,但实际上tcp本身就有心跳包机制默认是不打开的,要用setsockopt将SOL_SOCKET.SO_KEEPALIVE设置为1才是打开的,并且可以设置三个参数tcp_keepalive_time /tcp_keepalive_probes/tcp_keepalive_intvl,分别表示连接闲置多久开始发keepalive的ack包、发几个ack包不回复才当对方死了、两个ack包之间间隔多长

23、路由器与交换机的区别
答:路由器工作在网络层,交换机工作在数据链路层;路由器通过IP寻址,转发,交换机通过MAC地址完成寻址,过滤;路由器收到数据后会根据路由表中的记录选择数据的去向(送入目标主机\送入下一跳路由器\交换机)而交换机收到数据后会查看MAC表,有记录就传输,没记录就直接丢弃.
但路由器是通过软件运行的较慢
24、UDP如何实现可靠传输
应用层:
25、DNS域名系统。采用TCP还是UDP协议?为什么?
答:当用户通过浏览器访问某域名的时候:
1)浏览器会先在自己的缓存中查找是否有该网址的IP
2)如果没有,就到本地host文件中查找
3)到路由器缓存中查找;这三步都是客户端DNS缓存
4)但用户客户端缓存中没有的时候,就会进入ISP DNS缓存中查找,如果使用电信的宽带,就会到电信的DNS服务器中查找
5)如果服务商的DNS缓存中也没有,就要进入根DNS服务器中寻找,如果还没有,跟服务器就会把管辖范围内的顶级服务器IP告诉本地DNS
6)顶级域名服务器收到请求后查看本地文件,没有则将主域名服务器IP告知
7)主域名服务器会查找本地文件,没有就传递至下一级域名服务器,直到找到
8)获得结果后本地DNS会把结果保存在本地并把结果反馈给浏览器,浏览器就能正常建立web连接了

同时使用TCP和UDP,在区域传输的时候选用TCP其他时候使用UDP
区域传输是指辅域名服务器向主域名服务器更新缓存的时候会建立,这个过程中会增减大量数据,需要稳定链接,所以需要TCP稳点连接
进行域名解析时,返回的字节一般都在512字节一下(一般只有域名和对应IP),所以效率更高的UDP会被选用,但当超过512字节时,域名解析同样也会使用TCP连接进行传递.理论上准确性高的TCP完全可以代替UDP进行域名解析,但实际上很多DNS服务器只能进行UDP传输
26、FTP协议(了解)
27、HTTP请求报文与响应报文首部结构
答:HTTP报文
HTTP报文主要分为:请求报文(客户到服务器)和响应报文(服务器到客户)
请求报文和响应报文的头部结构类似只有开始行不同
报文结构:
方法(空格) URL (空格)版本(回车换行) -----请求报文开始行
[方法(空格)状态码(空格)版本(回车换行) -----响应报文开始行]
首部字段名:(空格)值(回车换行) 首部行
首部字段名:(空格)值(回车换行) 首部行
. .
. .
. .
首部字段名:(空格)值(回车换行) 首部行
(回车换行)
主体段
回车换行:\r\n
方法为通用的几种方法(get post connect …)
28、HTTP1.0、HTTP1.1、HTTP2.0对比
答:
缓存处理:1.0使用头部的If-Modified-Since作为是否缓存的标志,而1.1中ntity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
带宽优化及网络连接的使用:1.0中如果想选取一部分数据,就会将整个对象传过来,浪费了大量带宽且不支持断点续传;1.1中引入了range头域,它允许只请求某个资源的一部分,返回码是206
错误通知:1.1中新增了24个状态码
HOST处理:1.0中不存在主机名的概念,1.1中可以传入主机名
长连接:1.1中默认打开keep_alive,支持长连接和流水线连接,这样处理可以使一个tcp连接传递多个http请求,一定程度上缓解了1.0每个请求都需要重新连接的局面.
29、HTTP与HTTPS对比
答:
1)HTTPS需要申请CA证书,证书一般是需要缴费的
2)HTTP运行在TCP连接上,是明文传输,HTTPS运行在SSL/TLS上,SSL/TLS运行在TCP上,数据全部经过了加密
3)HTTP一般使用80端口,HTTPS使用443端口
4)HTTPS可以防劫持,更安全

30、HTTPS加密流程
答:客户端发送SYN报文服务器回应SYNACK报文,
然后客户端发送ACK报文,并向服务端发送请求证书公钥报文,附带随机数1,ssl版本,加密协议等.
服务端发送证书公钥与随机数2
客户端拿收到的进行检测,然后随机生成一段预会话密钥,用证书公钥加密后发送到服务端处.至此,已有三个随机数生成(随机数1\随机数2\预会话密钥),自身使用与会话密钥以及三个随机数生成会话密钥,用于会话加密.
服务端收到加密信息,使用证书私钥解密后获得预会话密钥,通过此密钥与之前两个随机数生成会话密钥.完成后发送报文告知客户端.
客户端收到回文就可以使用会话密钥对数据进行加密然后发送了.

31、方法:GET、HEAD、POST、PUT、DELETE
答:
1)GET 用于获取服务器中指定资源
2)POST 用于向特定资源提交数据,进行处理请求(向表单提供数据,向文件写入)
3)HEAD用于向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
4)DELETE用于向服务器请求删除URL中指定的资源
5)PUT 把消息本体中的消息发送到一个URL,跟POST类似,但不常用。如果目标存在,就修改目标,如果目标不存在,就创建一个

32、状态码:1**、2**、3**、4**、5**
答:
1**:服务器已收到信息,还需要客户端继续操作
2**:正常
3**:重定向
4**:客户端报文语法错误
5**:服务器错误
33、cookie与session区别
34、输入一个URL到显示页面的流程(越详细越好,搞明白这个,网络这块就差不多了)

ppp协议(point to point protocol):数据链路层
ICMP协议(控制报文协议):网络层(ping 使用的是echo回响(reply))
OSPF协议(链路状态路由协议):

参考书籍:《计算机网络》(第5版)、《TCP/IP详解卷1:协议》、《图解HTTP》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值