计算机网络经典知识点(持续更新中)

目录

 

1.TCP如何实现可靠性?

2.tcp/udp区别

3.输入网址回车后发生了什么?

4.流量控制与拥塞控制

5.HTTP状态码

6.TCP三次握手,如果少了最后一次,会发生什么?

7.三次握手连接阶段,最后一次ACK包丢失会进入什么样的一个状态?

8.http中的方法有哪些?get和post的区别?

9.DNS过程

10.http和https的区别

11.如果服务器出现大面积的time_wait,可能的原因有哪些?

12.公钥和秘钥

13.OSI模型和TCP/IP模型

14.先问了tcp三次握手,四次挥手,如果突然客户端突然断了服务端怎么办?

15.问网络层有哪些协议,http格式,字段,怎么发送?

16.报文文在网络中停留的时间大概是多久?

17.对称加密和非对称加密

18.网络不通了,如何定位网络问题?

19.知道 Cookie 吗?

20.滑动窗口

21.内存对齐,网络传输的时候会因为内存对齐出现什么问题

22.TCP 的 keepalive 机制

23.Socket通信流程


1.TCP如何实现可靠性?

答:

  • 校验和
  • 序列号
  • 确认应答
  • 超时重传
  • 连接管理
  • 流量控制
  • 拥塞控制

2.tcp/udp区别

答:

TCP和UDP的比较

1. 对比

 UDPTCP
是否连接无连接面向连接
是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
传输方式面向报文面向字节流
首部开销首部开销小,仅8字节首部最小20字节,最大60字节
适用场景适用于实时应用(IP电话、视频会议、直播等)适用于要求可靠传输的应用,例如文件传输

2. 总结

  • TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
  • 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为。
  • 对数据准确性要求高,速度可以相对较慢的,可以选用TCP。

3.输入网址回车后发生了什么?

答:参考:https://blog.csdn.net/jiao_0509/article/details/82491299?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

第一步:浏览器输入域名

例如输入:www.csdn.net/

第二步:浏览器查找域名的IP地址

浏览器会把输入的域名解析成对应的IP,其过程如下:

1.查找浏览器缓存:因为浏览器一般会缓存DNS记录一段时间,不同浏览器的时间可能不一样,一般2-30分钟不等,浏览器去查找这些缓存,如果有缓存,直接返回IP,否则下一步。

2.查找系统缓存:浏览器缓存中找不到IP之后,浏览器会进行系统调用(windows中是gethostbyname),查找本机的hosts文件,如果找到,直接返回IP,否则下一步。

3.查找路由器缓存:如果1,2步都查询无果,则需要借助网络,路由器一般都有自己的DNS缓存,将前面的请求发给路由器,查找ISP 服务商缓存 DNS的服务器,如果查找到IP则直接返回,没有的话继续查找。

4.递归查询:如果以上步骤还找不到,则ISP的DNS服务器就会进行递归查询,所谓递归查询就是如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步查询。(本地域名服务器地址是通过DHPC协议获取地址,DHPC是负责分配IP地址的)

5.迭代查询:本地域名服务器采用迭代查询,它先向一个根域名服务器查询。本地域名服务器向根域名服务器的查询一般都是采用迭代查询。所谓迭代查询就是当根域名服务器收到本地域名服务器发出的查询请求报文后,要么告诉本地域名服务器下一步应该查询哪一个域名服务器,然后本地域名服务器自己进行后续的查询。(而不是替代本地域名服务器进行后续查询)。

本例子中:根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.net的IP地址。本地域名服务器向顶级域名服务器dns.net进行查询。顶级域名服务器dns.net告诉本地域名服务器,下一次应查询的权限域名服务器dns.csdn.net的IP地址。本地域名服务器向权限域名服务器dns.csdn.net进行查询。权限域名服务器dns.csdn.net告诉本地域名服务器,所查询的主机www.csdn.net的IP地址。本地域名服务器最后把结果告诉主机。

第三步 :浏览器与目标服务器建立TCP连接

1.      主机浏览器通过DNS解析得到了目标服务器的IP地址后,与服务器建立TCP连接。

2.      TCP3次握手连接:浏览器所在的客户机向服务器发出连接请求报文(SYN标志为1);服务器接收报文后,同意建立连接,向客户机发出确认报文(SYN,ACK标志位均为1);客户机接收到确认报文后,再次向服务器发出报文,确认已接收到确认报文;此处客户机与服务器之间的TCP连接建立完成,开始通信。

第四步:浏览器通过http协议发送请求

浏览器向主机发起一个HTTP-GET方法报文请求。请求中包含访问的URL,也就是http://www.csdn.com/ ,KeepAlive,长连接,还有User-Agent用户浏览器操作系统信息,编码等。值得一提的是Accep-Encoding和Cookies项。Accept-Encoding一般采用gzip,压缩之后传输html文件。Cookies如果是首次访问,会提示服务器建立用户缓存信息,如果不是,可以利用Cookies对应键值,找到相应缓存,缓存里面存放着用户名,密码和一些用户设置项。

第五步:某些服务会做永久重定向响应

对于大型网站存在多个主机站点,了负载均衡或者导入流量,提高SEO排名,往往不会直接返回请求页面,而是重定向。返回的状态码就不是200OK,而是301,302以3开头的重定向码,浏览器在获取了重定向响应后,在响应报文中Location项找到重定向地址,浏览器重新第一步访问即可。

重定向的作用:重定向是为了负载均衡或者导入流量,提高SEO排名。利用一个前端服务器接受请求,然后负载到不同的主机上,可以大大提高站点的业务并发处理能力;重定向也可将多个域名的访问,集中到一个站点;由于baidu.com,www.baidu.com会被搜索引擎认为是两个网站,照成每个的链接数都会减少从而降低排名,永久重定向会将两个地址关联起来,搜索引擎会认为是同一个网站,从而提高排名。

第六步:浏览器跟踪重定向地址

当浏览器知道了重定向后最终的访问地址之后,重新发送一个http请求,发送内容同上。

第七步:服务器处理请求

服务器接收到获取请求,然后处理并返回一个响应。

第八步:服务器发出一个HTML响应

返回状态码200 OK,表示服务器可以响应请求,返回报文,由于在报头中Content-type为“text/html”,浏览器以HTML形式呈现,而不是下载文件。

第九步:释放TCP连接

1.     浏览器所在主机向服务器发出连接释放报文,然后停止发送数据;

2.     服务器接收到释放报文后发出确认报文,然后将服务器上未传送完的数据发送完;

3.     服务器数据传输完毕后,向客户机发送连接释放报文;

4.     客户机接收到报文后,发出确认,然后等待一段时间后,释放TCP连接;

第十步:浏览器显示页面

在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了,浏览器接收到返回的数据包,根据浏览器的渲染机制对相应的数据进行渲染。渲染后的数据,进行相应的页面呈现和脚步的交互。

第十一步:浏览器发送获取嵌入在HTML中的其他内容

比如一些样式文件,图片url,js文件url等,浏览器会通过这些url重新发送请求,请求过程依然是HTML读取类似的过程,查询域名,发送请求,重定向等。不过这些静态文件是可以缓存到浏览器中的,有时访问这些文件不需要通过服务器,直接从缓存中取。某些网站也会使用第三方CDN进行托管这些静态文件。

4.流量控制与拥塞控制

答:

一:流量控制

什么是流量控制?流量控制的目的?

如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。

如何实现流量控制?

由滑动窗口协议(连续ARQ协议)实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。主要的方式就是接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。

流量控制引发的死锁?怎么避免死锁的发生?

当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。
为了避免流量控制引发的死锁,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。

二:拥塞控制

拥塞解决的两种方法:

发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢开始+拥塞避免

一开始的慢开始算法的指数增长是很恐怖的,所以为了防止拥塞窗口增长过快需要设置一个门限ssthresh

无论在慢开始阶段还是在拥塞避免阶段,只要发送方没有收到确认,就认为这时候拥塞了。

1.就要把慢开始门限设置为此时窗口值的一半

2.然后把拥塞窗口重新设置为1,执行慢开始算法。

快重传+快恢复

快重传要求接收方在收到一个失序的报文段后就立即发出重复确认

如果没有快速重传和快速恢复,TCP将会使用定时器来要求传输暂停。在暂停这段时间内,没有新的数据包被发送。所以快速重传和快速恢复旨在快速恢复丢失的数据包。

 

快重传的机制还是比较好理解的,如图所示,接收方发现M3丢失,则立即发送对M2的重复确认。一旦发送方一连收到三个M2的重复确认就应当立即重传M3,也就是发送方收到第四个对M2的确认时。

 

与快重传配合使用的还有快恢复算法,结合上图的实例来分析,其过程有以下两个要点。

1.当发送方连续收到三个重复确认时,就把门限减半。

2.考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将拥塞窗口设置为门限的大小,然后执行拥塞避免算法(加法)。

区别:

拥塞控制的任务是确保子网可以承载所到达的流量。这是一个全局性问题,涉及到各方面的行为,包含全部的主机、全部的路由器、路由器内部的存储转发处理过程,以及全部可能会削弱子网承载容量的其他因素。

流控制仅仅与特定的发送方和特定的接收方之间的点到点流量有关。它的任务是,确保一个高速的发送方不会持续地以超过接收方吸收能力的速率数据传输。流控制通常涉及到的做法是,接收方向发送方提供某种直接的反馈,以便告诉发送方别人一端的情形究竟怎么样。

5.HTTP状态码

答:

 1XX:信息状态码

状态码含义描述
100继续初始的请求已经接受,请客户端继续发送剩余部分
101切换协议请求这要求服务器切换协议,服务器已确定切换

 2XX:成功状态码

状态码含义描述
200成功服务器已成功处理了请求
201已创建请求成功并且服务器创建了新的资源
202已接受服务器已接受请求,但尚未处理
203非授权信息服务器已成功处理请求,但返回的信息可能来自另一个来源
204无内容服务器成功处理了请求,但没有返回任何内容
205重置内容服务器处理成功,用户终端应重置文档视图
206部分内容服务器成功处理了部分GET请求

3XX:重定向状态码

状态码含义描述
300多种选择针对请求,服务器可执行多种操作
301永久移动请求的页面已永久跳转到新的url
302临时移动服务器目前从不同位置的网页响应请求,但请求仍继续使用原有位置来进行以后的请求
303查看其他位置请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码
304未修改自从上次请求后,请求的网页未修改过
305使用代理请求者只能使用代理访问请求的网页
307临时重定向服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求

4XX:客户端错误状态码

状态码含义描述
400错误请求服务器不理解请求的语法
401未授权请求要求用户的身份演验证
403禁止服务器拒绝请求
404未找到服务器找不到请求的页面
405方法禁用禁用请求中指定的方法
406不接受无法使用请求的内容特性响应请求的页面
407需要代理授权请求需要代理的身份认证
408请求超时服务器等候请求时发生超时
409冲突服务器在完成请求时发生冲突
410已删除客户端请求的资源已经不存在
411需要有效长度服务器不接受不含有效长度表头字段的请求
412未满足前提条件服务器未满足请求者在请求中设置的其中一个前提条件
413请求实体过大由于请求实体过大,服务器无法处理,因此拒绝请求
414请求url过长请求的url过长,服务器无法处理
415不支持格式服务器无法处理请求中附带媒体格式
416范围无效客户端请求的范围无效
417未满足期望服务器无法满足请求表头字段要求

 

5XX:服务端错误状态码

状态码含义描述
500服务器错误服务器内部错误,无法完成请求
501尚未实施服务器不具备完成请求的功能
502错误网关服务器作为网关或代理出现错误
503服务不可用服务器目前无法使用
504网关超时网关或代理服务器,未及时获取请求
505不支持版本服务器不支持请求中使用的HTTP协议版本

6.TCP三次握手,如果少了最后一次,会发生什么?

答:参考:https://www.bilibili.com/video/BV17p411f7ZZ?p=117

答:两次握手会造成已失效的连接请求又传送到服务器端,导致服务端建立了链接,等待客户端响应,从而造成资源的浪费。

7.三次握手连接阶段,最后一次ACK包丢失会进入什么样的一个状态?

答:

Server 端

第三次的ACK在网络中丢失,那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制,会等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包。

而Server重发SYN+ACK包的次数,可以通过设置/proc/sys/net/ipv4/tcp_synack_retries修改,默认值为5.

如果重发指定次数之后,仍然未收到 client 的ACK应答,那么一段时间后,Server自动关闭这个连接。

Client 端

在linux c 中,client 一般是通过 connect() 函数来连接服务器的,而connect()是在 TCP的三次握手的第二次握手完成后就成功返回值。也就是说 client 在接收到 SYN+ACK包,它的TCP连接状态就为 established (已连接),表示该连接已经建立。那么如果 第三次握手中的ACK包丢失的情况下,Client 向 server端发送数据,Server端将以 RST包响应,方能感知到Server的错误。

8.http中的方法有哪些?get和post的区别?

答:

什么是HTTP?

HTTP,即超文本传输协议,是一种实现客户端和服务器之间通信的响应协议,它是用作客户端和服务器之间的请求。

客户端(浏览器)会向服务器提交HTTP请求;然后服务器向客户端返回响应;其中响应包含有关请求的状态信息,还可能包含请求的内容。

HTTP的常用方法

1、GET方法

GET方法用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响。

在GET请求的URL中发送查询字符串(名称/值对),需要这样写:

1

/test/demo_form.php?name1=value1&name2=value2

说明:

GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,仅用于请求数据(不修改)。

注:因GET请求的不安全性,在处理敏感数据时,绝不可以使用GET请求。

2、POST方法

POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。

POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。

3、HEAD方法

HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复相应头部编写的元数据非常有用,而无需传输整个内容。

4、PUT方法

PUT方法用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。

它会将包含的元素放在所提供的URI下,如果URI指示的是当前资源,则会被改变。如果URI未指示当前资源,则服务器可以使用该URI创建资源。

5、DELETE方法

DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。

6、CONNECT方法

CONNECT方法用来建立到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS)。

7、OPTIONS方法

OPTIONS方法用来描述了目标资源的通信选项,会返回服务器支持预定义URL的HTTP策略。

8、TRACE方法

TRACE方法用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。

get和post的区别:

  • GET 用于获取信息,是无副作用的,是幂等的,且可缓存。
  • POST 用于修改服务器上的数据,有副作用,非幂等,不可缓存。
  • GET 和 POST 方法没有实质区别,只是报文格式不同。

9.DNS过程

答:

具体什么是DNS?
DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。

 

DNS 的过程

关于DNS的获取流程:
DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。
具体过程如下:
①用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了
②浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如

http://www.baidu.com/

, 并将这个主机名传送给DNS应用的客户端
③DNS客户机端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作)
④该DNS客户机最终会收到一份回答报文,其中包含有该主机名对应的IP地址
⑤一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接.

解析顺序

  1) 浏览器缓存

  当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);

  2) 系统缓存

  当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;

  3) 路由器缓存

  当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;

  4) ISP(互联网服务提供商)DNS缓存

  当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;

  5) 根域名服务器

  当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;

  6) 顶级域名服务器

  顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;

  7) 主域名服务器

  主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;

  8)保存结果至缓存

  本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。

10.http和https的区别

答:参考:https://blog.csdn.net/qq_38289815/article/details/80969419

HTTP 与 HTTPS  的区别

1、HTTPS  协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前网易官网是http,而网易邮箱是 https 。)

2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

11.如果服务器出现大面积的time_wait,可能的原因有哪些?

答:这种情况比较常见,一些爬虫服务器或者WEB服务器(如果网管在安装的时候没有做内核参数优化的话)上经常会遇到这个问题,对于爬虫服务器来说他本身就是“客户端”,在完成一个爬取任务之后,他就 会发起主动关闭连接,从而进入TIME_WAIT的状态,然后在保持这个状态2MSL(max segment lifetime)时间之后,彻底关闭回收资源。

解决办法:

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间。

12.公钥和秘钥

答:参考:https://blog.csdn.net/qq_41586280/article/details/82669840

1、密钥对:在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。

2、公钥:公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。

3、私钥:如上,用来解密公钥加密的数据。

4、摘要:对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得。

5、签名:使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。(看最下面的一部分就明白了)

6、签名验证:数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。

13.OSI模型和TCP/IP模型

答:可参考:https://www.cnblogs.com/zaijianba/p/11520397.html

14.先问了tcp三次握手,四次挥手,如果突然客户端突然断了服务端怎么办?

答:

TCP三次握手:

  • 第一次:客户端发送初始序号x和syn=1请求标志

  • 第二次:服务器发送请求标志syn,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ack=x+1

  • 第三次:客户端发送ACK确认号,发送自己的序号seq=x+1,发送对方的确认号ack=y+1

TCP四次挥手:

  • 一次挥手:客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态
  • 第二次挥手:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态
  • 第三次挥手:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)
  • 第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态。

突然断开:

在这里插入图片描述

15.问网络层有哪些协议,http格式,字段,怎么发送?

答:

网络层协议:IP协议

IP协议配套使用实现其功能的还有地址解析协议ARP

逆地址解析协议RARP

因特网报文协议ICMP

因特网组管理协议IGMP

http格式:https://blog.csdn.net/qq_40933663/article/details/90045869

16.报文文在网络中停留的时间大概是多久?

答:参考:https://www.cnblogs.com/zhangkele/p/10323588.html

17.对称加密和非对称加密

答:

1. 对称加密

对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。

常见的对称加密算法:DES,AES,3DES等等。

2. 非对称加密

非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。

常见的非对称加密算法:RSA,ECC

区别:

对称加密算法相比非对称加密算法来说,加解密的效率要高得多。但是缺陷在于对于秘钥的管理上,以及在非安全信道中通讯时,密钥交换的安全性不能保障。所以在实际的网络环境中,会将两者混合使用.

18.网络不通了,如何定位网络问题?

答:

ping命令

1.ping 127.0.0.1

ping 127.0.0.1 能通,看到丢失=0,说明没有丢包,这就可以判断你电脑的TCP/IP协议栈没有问题。

2.ping 自己电脑的IP地址。

能ping通,丢失=0,说明你电脑的网卡驱动这些都没问题。

如果不通,那么建议你检查网卡驱动是不是出问题了,不会检查的话,教你一个小白的方法,就是安装驱动精灵,进行检测安装。

3.ping网关

网关地址,如果是家里的路由器,一般都是192.168.1.1或192.168.1.254。不确定的话,也可以用命令查看。

能ping通过,那说明:电脑到网关(也就是家里的无线路由器,这段是没有问题的,说明你电脑的数据包,能正常到达路由器了。

如果不能ping通,说明你电脑到网关(无线路由器),出问题了。

建议检查:是不是网线没接好? 是不是网线坏了? 是不是路由器的网口有问题了? 是不是路由器已经关机了?

4.ping 网址

这一步,是来检查DNS是否有问题。没问题,就能打开网页。

这里举例百度网址,www.baidu.com

结果显示:

能ping通,说明DNS没问题,这是你去打开网页,就可以正常上网,浏览网页了。

如果不通,那么说明你DNS地址有问题

那么建议你修改一下DNS地址。

19.知道 Cookie 吗?

答:

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。Cookie具有不可跨域名性。

20.滑动窗口

答:

我们得知TCP最基本的传输可靠性来源于确认重传机制,TCP滑动窗口的可靠性也是建立在确认重传的基础上的。发送窗口只有收到接收端对于本段发送窗口内字节的ACK确认,才会移动发送窗口的左边界,接收窗口只有在前面所有的段都确认的情况下,才会移动左边界。当在前面还有字节未接收,但收到后面的字节的情况下,窗口是不会移动的,并不对后续字节确认,以此确保对端会对这些数据进行重传。

滑动窗口的大小可以依据一定策略动态调整,应用会根据自身处理能力的变化,通过本端TCP接收窗口的大小的控制,来实现对端的发送窗口的流量控制。

问题:
1,什么是滑动窗口?
答:简单来说,滑动窗口就是一种流量控制技术,用于接收方通知发送方自己还有多少缓冲区可以接收数据,发送方根据接收方的处理能力来发送数据,不会导致接收方处理不过来。

2,滑动窗口有什么用?
答:一是保证TCP的可靠性;二是保证TCP的流控特性。

3,滑动窗口怎么用?其原理是什么?
答:发送窗口只有收到接收端对于本段发送窗口内字节的ACK确认,才会移动发送窗口的左边界,接收窗口只有在前面所有的段都确认的情况下,才会移动左边界。当在前面还有字节未接收,但收到后面的字节的情况下,窗口是不会移动的,并不对后续字节确认,以此确保对端会对这些数据进行重传

21.内存对齐,网络传输的时候会因为内存对齐出现什么问题

答:但在跨平台中传输结构体(或联合)时,则这个特性有可能会影响到数据的准确性。原因之一是自定义网络通讯协议包通常都是定义成struct的形式, 而struct会自动内存对齐,这会造成结构体成员间有"空洞",传给其它平台后,其它平台弄不清楚原平台是按什么方式对齐的,只会按自己的方式解包。 解出来的结果有可能是错误的。防止这种情况出现需要,在自定义通讯协议时,一定要让结构体(或联合)成员间都按1来对齐。

22.TCP 的 keepalive 机制

答:https://blog.csdn.net/huangyimo/article/details/81908195

23.Socket通信流程

答:https://blog.csdn.net/fightsyj/article/details/86251421

24.关于子网掩码的知识点

答:https://blog.csdn.net/faker_wang/article/details/80747407

25.TIME_WAIT状态的意义及副作用

答:参考:https://blog.csdn.net/huangyimo/article/details/81505558

原因:

1.为实现TCP全双工连接的可靠释放。

2.为使旧的数据包在网络因过期而消失。

副作用:如果在有大量并发的短链接情况下,服务器(主动关闭方)上的 TIME_WAIT 状态会很多,这会消耗很多系统资源。

26.ARP地址解析协议

答:参考https://blog.csdn.net/jiejiemcu/article/details/88406088

ARP协议是地址解析协议(Address Resolution Protocol)是通过解析IP地址得到MAC地址的。主要工作就是建立、查询、更新、删除ARP表项。

27.Fin2_WAIT状态的意义

答:FIN_WAIT2主要用于等待对端传送数据。

28.UDP可以调用connect函数吗?

答:

结论:
udp可以调用connect函数。
udp可以多次调用connect函数。


udp调用connect作用:
发送端:我们不需要再次指定也不能指定端口和ip地址
接收端:不必使用类似recvfrom的函数来获得数据报的发送者,一个已连接的udp套接字只与一个ip地址交换数据
已连接的udp如果错误会返回给发送端
udp多次调用connect作用:
指定一个新的ip和端口
断开套接字


适用于udp一对一的经常不断发送数据的情况,可以提高效率。
比如:
未connect的udp发送数据为,建立连接->发送数据->断开连接->建立连接->发送数据->断开连接。每次发送报文可能要做路由查询
connect的udp发送数据为,建立连接->发送数据->发送数据->发送数据->断开连接。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值