计算机网络八股文复习

计算机网络八股文复习

基础篇

  1. OSI 七层模型
    1. 应用层:在这一层会有很多应用协议,HTTP、FTP、DNS、SMTP
    2. 表示层
    3. 会话层
    4. 传输层:TCP、UDP在这一层
    5. 网络层:IP协议
    6. 数据链路层:MAC
    7. 物理层

DNS解析

所谓的DNS解析,就是服务发现的过程,就是找到你想访问的服务器的Ip地址和端口号。
DNS就是保存了域名和对应IP地址的服务器。
在这里插入图片描述
通过这张图就能看出来,首先去访问是最高级别的根DNS服务器,然后一层一层往下访问,最后找到www.baidu.com,找到之后就是发送对应的请求获得想要的数据

TCP篇

TCP是一个面向连接、可靠的、基于字节流的通信协议
面向连接:TCP是一个面向连接的协议,它不像UDP可以对多个主机发送信息,基于TCP,建立连接之后只能对应一个主机发送信息。
可靠的:TCP有多个方法保证信息不丢失。
基于字节流的:因为一个TCP消息,会被切割成多个报文发送,如果接收方没有接受到发送方传来的上一个报文,就会一直等待,接下来接收到有重复的包也会丢弃

TCP的头部

在这里插入图片描述
从这张图中,我们能看出TCP头部的重要组成部门

  • 源端口号和目标端口号,IP地址是放在IP报文中的
  • 序列号,TCP是面向连接的,在发送一个TCP报文的时候,会叠加这个序列号,表明这个报文顺序
  • 确认应答号,TCP是面向连接的,也就是两个主机之间的传送,确认应答号的作用是,表明在这个应答号之前的数据都被接受了
  • 首部长度,因为TCP头部不是定长的,就设计这个首部长度来表明长度
  • 校验和是用来验证TCP的数据安全性的
  • ACK,确认应答,除了建立连接的阶段,其余阶段都为1
  • RST,表明TCP出现异常了,这个时候必须强制断开连接
  • SYN,表示想建立连接
  • FIN,表示连接中断

TCP与UDP的区别

UDP首部
在这里插入图片描述

  • 从这儿能看出UDP的首部大小要小很多,这说明从首部开销的角度来讲,UDP要小很多
  • TCP传输需要连接而UDP不需要
  • TCP是流失传送数据而UDP是按包传送,包可能会乱序
  • TCP保证数据可靠,而UDP是不能保证的
  • TCP是面向连接的也就是点对点的,而UDP是一对多的
  • TCP有拥塞控制、流量控制等手段,而UDP不会随着网络堵塞而降低他的发送速率。

TCP的三次握手

都知道TCP是面向连接的,那这个连接是如何建立的呢
第一次握手
在这里插入图片描述

  • 这是客户端发送的报文,首先客户端会随机初始化一个序列号,后续客户端的发送,都是在这个序列号上叠加。设置SYN为1

第二次握手
在这里插入图片描述
服务端发送的报文,返回的ACK,让客户端知道自己发送没有问题,返回SYN是表名服务端也想和客户端建立连接。返回的确认应答号表名,在这个序列号之前的数据都被正常接受了,服务端也会生成一个序列号,让后续自身发送的包不会乱序。

第三次握手
在这里插入图片描述
第三次握手就正式建立连接了,返回确认应答号表名服务器发送的数据包被正常接受了。这次请求可以携带数据!

那么问题就来了,为什么不是两次握手,一定要三次握手呢?
原因:三次握手才能保证双方都有发送和接受的能力,并且三次握手能阻止重复历史连接的初始化

  • 三次握手是如何组织重复历史连接的初始化的?
    首先我们要明白,ESTABLISHED这个状态。正常的三次握手,在客户端发送第三次TCP报文的时候,客户端处于ESTABLISHED状态,而服务端接受报文的时候,变成ESTABLISHED状态。

此时模拟一个情况,客户端发送一个请求建立连接的报文,SYN+SEQ=90,此时客户端宕机,重启后再次发送请求建立连接的报文SYN+SEQ=100,此时服务端接受到就的请求,返回SYN+ACK+ACK_SEQ=91+SEQ_SERVER=400,此时客户端接受到这个TCP报文之后,通过上下文判断这是一个非法的请求,就能终止这次的TCP链接,而如果是一个两次连接,在服务端发送完报文之后,就处于ESTABLISHED了,这明显就浪费了服务端的资源。

如果第一次握手丢失
客户端重传

如果第二次握手丢失
客户端重传
服务端重传

第三次握手丢失
服务端重传

TCP三次握手状态机流转。
在这里插入图片描述

  1. 初期客户端、服务端处于close状态。接着服务端开始监听端口,处于Listen状态
  2. 客户端发送SYN=1+SEQ=1的请求报文至服务端,客户端处于SYN_SENT状态,服务端接收到报文之后,返回响应报文,SYN=1+ACK_SEQ=2+SEQ_SERVER=1,之后服务端处于SYN_RECIVE状态。
  3. 客户端接收到SYN=1+ACK_SEQ=2+SEQ_SERVER=1的报文后,自身处于ESTABLISHED状态,然后返回ACK=1+ACK_SEQ=2+SEQ=2的报文,客户端接收到之后,更新自身状态为ESTABLISHED.
    这也是为什么只有第三次的发送能够携带信息的原因,因为其余两次就算建立成功了,两边的链接也没有建立起来,而第三次状态机建立起来之后,两边就能通信了。

TCP的四次挥手

四次挥手的流程相对来说就简单很多

  1. 客户端发送FIN=1的报文,表明,客户端没有数据需要发送了,但是还可以接受数据

  2. 服务端发送ACK表明确定

  3. 服务端发送FIN=1的报文表明,服务端没有东西要发送了,再等待客户端最后的确认

  4. 客户端发送最后确认
    四次挥手的状态机流转
    在这里插入图片描述

  5. 初期客户端发送端都处于ESTABLISHED状态,客户端发送FIN报文,自身处于FIN_WAIT_1状态

  6. 服务端接收到消息,返回ACK,服务端进入CLOSE_WAIT状态,在这个状态中,会把没有发送完的信息全部发送完,客户端接受到ACK之后,自身处于FIN_WAIT_2状态。

  7. 服务端发送完信息后,发送FIN状态,然后CLOSE

  8. 客户端接受FIN状态后,进入TIME_WAIT状态,等待一段时间后关闭 。

为什么有TIME_WAIT
首先明确TIME_WAIT的时间是2MSL,MSL为报文存在最长时间,通过限制这个时间,让这个连接中的数据传送完毕,避免影响下个连接。

TCP的滑动窗口

在TCP中定义了滑动窗口的概念,在这个窗口内的TCP报文可以自由发送,只要发送方按时收到确认应答即可,这样即使中间某些ACK丢失也不会触发多余的重传。
在这里插入图片描述
如图,因为收到了ACK700,因此明白0~699的数据都被撑场接受了。

TCP的流量控制

流量控制有两种方法

  1. 停止等待,发送一个TCP报文,等待响应 ,响应了才会发送下一个TCP报文,这明显损耗太大了。
  2. 滑动窗口,通过滑动窗口,两边都有可用的窗口分别对应发送
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值