【计算机网络】常见问题与解答(追加中)

时间:2018年1月15日

1.TCP三次握手与四次挥手过程,各个状态名称与含义,TIME_WAIT的作用?

三次握手:TCP在通信前A会向对端发送SYN包作为建立连接的请求等待确认应答。B返回一个ACK+SYN包回应对方并请求建立连接。A向B返回ACK包做出应答,连接建立完成。

若在某个阶段中断,TCP协议会再次以相同的顺序发送相同的数据包

四次挥手:客户端发送FIN请求切断连接;服务端返回ACK回应对方的FIN;服务端发送FIN请求断开连接;客户端发送ACK回应对方;

为什么挥手是四次,握手是三次呢?
因为握手的时候服务端可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

TIME_WAIT:发起方接收到FIN包后进入此状态

虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文
扩展:
TCP协议中的三次握手和四次挥手(图解)
TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)

2.TCP流控制、拥塞控制

流量控制:发送端主机会根据接收端的指示,对发送数据的量进行控制。接收端在接收到数据后会根据自己缓冲区的情况向发送端返回窗口的大小。

拥塞控制:为了在发送端所要发送的数据量定义了一个拥塞窗口,在慢启动时这个值设为1个数据段,之后每收到一个确认应答值+1,在发送数据包时将拥塞窗口的大小与接收端主机通知的窗口大小作比较,然后按照他们中较小的一个,发送比其还要小的数据量。

3.cookie、session的区别
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端(浏览器)保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式;
从安全性的角度,Session优于Cookie,所以用户验证这类场合一般选用Session;

4.TCP粘包拆包发生的原因与解决的方法?

发生的原因:
- 要发送的数据大于TCP发送缓冲区剩余空间大小,将会发送拆包。
- 待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
- 要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发送粘包。
- 接收数据端的应用层没有及时读取接收缓冲区中的数据,将发送粘包
- …..

解决的办法:
- 发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度。
- 发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来
- 可以在数据包之间设置边界,如添加特殊符号,接收端通过这个边界就可以将不同的数据包拆开

参考:TCP粘包,拆包及解决方法

5.IP、http、https
HTTPS主要是为了解决HTTP的以下三个缺点:通信使用明文;不验证通信方的身份;无法证明报文的完整性;

HTTPS并不是应用层的一种新协议,它只是HTTP通信接口部分用SSL和TSL协议代替。

HTTPS=HTTP+加密+身份验证+完整性保护。

共享秘钥加密:加密算法公开,需要双方传送秘钥才能解密,在传送过程中秘钥可能被窃听

交换秘钥加密:每一方有一对private key和一个public key,发送密文的一方使用对方的public key 加密,然后接收方使用自己的private key 解密。不用发送 private key。
HTTPS采用混合加密机制:如使用共享秘钥加密,则需要数字证书。

扩展:
TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
- 网络层:IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议;
- 传输层:TCP协议和UDP协议;
- 应用层:HTTP、FTP、TELNET、SMTP、DNS等协议

HTTP(超文本传输协议)连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

HTTPS(安全超文本传输协议) SSL(安全套接字层) TLS(传输层安全协议)
HTTPS作用:
- 内容加密(建立一个信息安全通道,来保证数据传输的安全);
- 身份认证(确认网站的真实性);
- 数据完整性(防止内容被第三方冒充或篡改);

HTTPS和HTTP的区别:
- HTTPS协议需要到CA申请证书。
- HTTP协议中信息是明文传输,HTTPS是具有安全性的SSL加密传输协议
- HTTP默认使用80端口,HTTPS默认使用443端口
- HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全

6.在浏览器输入一个网址发生了什么?
域名解析 –> 发起TCP的三次握手 –> 建立TCP连接后发起HTTP请求 –> 服务器响应HTTP请求,浏览器得到HTML代码 –> 浏览器解析HTML代码,并请求HTML代码中的资源(如js、css、图片等) –> 浏览器对页面进行渲染呈现给用户

域名解析:将输入的域名解析为IP地址,首先查找浏览器、系统缓存,然后hosts文件,然后远程的DNS服务器
TCP三次握手:
TCP:将HTTP报文分割为多个报文段,每个段都加上自己的首部可靠的传输给对方
IP:搜索对方的地址,一边中转一边传送
ARP:查找下一跳路由器的mac地址

发起HTTP请求:生成针对目标IP服务器的HTTP请求报文
服务端返回响应:通过响应报文
浏览器渲染页面


时间:2018年1月16日

1.路由器与交换器区别
交换机工作于数据链路层,能识别mac地址,临时存储数据帧,根据mac地址转发数据帧,一般具有自学机制维护这网段与mac地址的对应表。
路由器位于网络层,有自己的IP地址,能识别IP地址并根据IP地址转发数据包,维护着路由表,根据路由表选择最佳路线

2.网络层/IP层相关知识
A类网:0开头,1-8位是网络标识
B类网:10开头,1-16位是网络标识
C类网:110开头,1-24位是网络标识
D类网:1110开头,1-32位为网络标识
在分配IP地址时,主机标识既不能全为1也不能全为0

子网掩码:网络号全为1,主机号全为0
广播地址:主机号全为1
路由控制表:记录着网络地址与下一步应该发送至路由器的地址
IP分割再处理:由于每种数据链路的最大传输单元(以太网默认1500字节)不同,所以需要进行分片处理,分片由路由器完成,重组由主机完成。
IPV6:128号
IP首部:6*32位 源地址、目标地址、版本、片偏移、首部校验和、总长度等
ARP协议:例如主机A想要获取主机B的mac地址,A通过广播发送一个ARP请求包,如果ARP请求包中的IP地址与自己的IP地址一致,就将自己的mac地址塞入ARP包作为ARP响应返回给A
Ping的整个过程
Ping同一网段下的主机:通过ARP协议学习到对端的mac地址,然后封装ICMP报文发送给对端
Ping非同一网段下的主机:发现对方与自己不在同一网段下就去找网管转发数据,通过ARP学习到目标主机的mac地址后通过ICMP报文发送到对端

ICMP报文是什么:
ICMP消息可分为两类:用于诊断的查询信息、通知出错原因的错误信息类型、代码、校验和、标识符、序号、数据。
扩展:
ping 原理与ICMP协议
服务器禁止被ping的设置方法(图文)

3.OSI与TCP/IP各层的结构与功能,都有哪些协议?
OSI:
应用层:为应用程序提供服务,规定应用程序中相关细节(加首部)
表示层:将应用处理的信息转换为网络传输的格式(加首部)
会话层:负责决定何时建立和断开通信连接,数据分割等数据传输相关管理(加首部记录着数据传送顺序的信息)
传输层:负责输出和断开连接,起着可靠的输出的作用,只在通信双方节点上进行处理(加首部)
网络层:将数据传输到目标地址,主要负责寻址和路由选择
数据链路层:负责物理层面上的互联的结点之间的通信(包含mac地址首部信息),将0/1数据集合成帧
物理层:负责比特流与电压高低、光的闪灭之间的互换
TCP/IP:
应用层:对应osi的会话层表示层应用层,由1-多个程序实现
传输层:让应用程序之间实现通信
网络层:使用IP协议
网卡层:利用以太网中的数据链路层进行通信
(硬件):最底层负责数据传输的硬件,电话线等

七层:应用层、表示层、会话层、运输层、网络层、数据链路层、物理层
五层:应用层、运输层、网络层、数据链路层、物理层

TCP/IP体系结构:应用层、运输层、网络层、网络接口层
应用层:HTTP、TELNET、SMTP、FTP
运输层:传输控制协议TCP(面向连接,报文段)、UDP(无连接,用户数据报)
网络层:IP协议(路由器)
数据链路层:把IP数据报组装成帧传输(交换机)
物理层:传送元素的比特流
参考:
OSI七层与TCP/IP五层网络架构详解

4.TCP/IP的通信过程:
描述的时候以发送邮件为例
应用层:应用程序处理 编码、决定何时连接、将数据转发给下一层的TCP
TCP模块的处理:负责建立连接、发送数据、断开链接。(TCP首部中包含源端口号
和目标端口号、序号、校验和、控制位等信息)并将附了TCP首部的包发送给IP
IP块的处理:加上自己的IP首部(接收端的IP地址和发送端的IP地址)
参考路由控制表决定接受此数据包的路由或主机,发送到路由器或主机的驱动程序。
网络接口的处理:给数据附加上以太网首部并进行发送处理(以太网首部中包含接收端、发送端mac地址、标志以太网类型的以太网数据的协议)
接收数据:主机接收到以太网包以后,从以太网中找到mac地址,
如果是自己的就接受,不是自己的就丢弃,
然后查找包中的类型域从而确定以太网的数据类型

IP模块:查看IP包中的IP地址如果是自己的IP则接受,如果不是丢弃,接受数据从中查找响应的上层协议

TCP模块:计算校验和判断数据是否被损坏、检查是否在按照序号接受数据,
最后检查端口号确定具体的应用程序。

每个包首部中至少包含两个信息:一个是发送端和接收端的地址,另一个是
上一层的协议类型。

5.TCP与UDP的区别
TCP:面向连接、可靠的流协议(通过校验和、顺序控制、确认应答、重发机制、连接管理、窗口控制等)还进行拥塞控制、流控制。
用于在传输层有必要实现可靠传输的情况
UDP:面向无连接、不可靠
用于高速传输、实时性要求较高的通信(DNS、视频音频、广播等)
区别小结:
- 基于连接与无连接;
- 对系统资源的要求(TCP较多,UDP少);
- UDP程序结构较简单;
- 流模式与数据报模式 ;
- TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
扩展:
TCP和UDP的区别(转)

6.TCP报文结构
TCP首部(20字节):
源端口号、目标端口号:***(发送数据的位置,每发送一次就累计一次该数据的字节数);确认应答号(下一次应该受到的数据序号);TCP偏移(数据部分的开始位置);控制位;窗口大小;校验和;紧急指针;选项、填充
控制位:SYN FIN ACK URG PSH
数据部分;

7.TCP滑动窗口与回退 N 针协议
在建立TCP连接的同时,可以确定发送数据包的单位(MSS段)。
如果TCP每发送一个段进行一次确认应答处理,会因往返时间较长而浪费网络性能,窗口控制就是说确认应答不再以每个段为单位而是以更大的单位进行控制,这个更大的单位就是窗口,在这个窗口内的数据即便没有收到返回也能够发送出去。
通过流控制控制窗口的大小。
确认应答未能返回的情况:即使有少部分应答丢失也不会进行数据重发,可以通过下一个确认应答进行确认。
报文丢失:同一个序号的确认应答会不断地返回,发送端收到3次相同序号,就认为丢失,就会对相应的数据重发

8.Http 的报文结构
报文首部 空行 报文主体
请求报文首部:
请求行:请求方法名、请求资源、http 版本
请求首部字段:host(虚拟主机运行在同一个 ip 上因此需要 host 加以区分)、user-agent、accept、accept-language、accept-encoding、range(用于端点续传)、cookie
通用首部字段:cache-control、connection(控制不再转发给代理的首部字段)
实体首部字段:content-encoding、content-language、content-type应答报文首部:状态行:状态码、http 版本响应首部字段:date、server、content-type、content-length、content-range、location(重定向)、set-cookie
通用首部字段、实体首部字段

9.Http 支持的方法
【计算机网络】常见问题与解答(追加中)

10.Http 的状态码含义
- 200 ok
- 204 no content
- 206 partial content
- 301 moved permanently(永久性重定向)
- 302 found(临时重定向)
- 400 请求中存在语法错误
- 401 未认证
- 403 forbidden
- 404 not found
- 500 服务端在执行时发生了错误
- 503 服务器超负荷或正在维护

11.Http1.1 和 Http1.0 的区别
1.1 中所有连接默认都是持久连接
1.1 中增加了 options 方法和 trace 方法 connect 方法
1.1 引入了 range 域可以实现断点续传
1.1 引入 host 域,1.0 默认每个 ip 只绑定一个服务器

12.Http 怎么处理长连接
只要任意一端没有明确提出断开连接,则保持 TCP 连接状态,一次连接可以
进行多次请求响应交互。并且持久连接使得管线化连接成为可能:发送请求后不
用等待响应也可发送下一个请求
建立连接—数据传输…(保持连接)…数据传输—关闭连接
长连接多用于操作频繁、点对点连接,如数据库连接