计算机网络

计算机网络,第1张

计算机网络 目录

TCP的三次握手

四次挥手

应用层协议 – DNS域名解析

在浏览器键入URL后执行的全过程

TCP头和UDP头

TCP和UDP的区别

SYN攻击)">如何防止TCP泛洪攻击?(大量的半连接状态,特别是源IP地址是随机的->SYN攻击)

ping是通过什么协议实现的?

如何实现UDP的可靠传输?

HTTP请求报文

 HTTP响应报文格式

HTTP方法

HTTP状态码

长连接与短连接

HTTPS是如何建立连接的?其间交互了什么?

Session的工作原理

cookie和session的区别

流量控制:

TCP可靠传输的实现

五层模型


TCP的三次握手

假设A为客户端,B为服务器端。

  • 首先B处于LISTEN(监听)状态, 等待客户的连接请求。
  • 第一次握手:A向B发送连接请求报文,SYN=1,选择一个初始的序号x,并进入SYN_SENT(同步已发送)状态,等待服务器确认。SYN:同步序列编号。
  • 第二次握手:B收到连接请求报文,如果同意建立连接,则向A发送连接确认报文,SYN=1,ACK=1,确认号(ack)为x+1,同时也选择一个初始的序号y。此时服务器进入SYN_RECV(同步接收)状态。
  • 第三次握手:A收到B的连接确认报文后,还要向B发出确认,确认号为y+1,序列号为x+1。B收到A的确认后,连接建立,客户端和服务器进入ESTAB_LISHED(已建立连接)状态。

三次握手的原因

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

四次挥手

TCP连接的释放一共需要四步,因此称为『四次挥手』。

我们知道,TCP连接是双向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。

第一次挥手

若A认为数据发送完成,则它需要向B发送连接释放请求。该请求只有报文头,头中携带的主要参数为:

FIN=1,序列号seq=u。此时,A将进入FIN-WAIT-1状态。

第二次挥手

B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放。此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含:

ACK=1,seq=v,ack=u+1。

  1. PS1:ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答。
  2. PS2:seq=v,v-1是B向A发送的最后一个字节的序号。
  3. PS3:ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节。

A收到该应答,进入FIN-WAIT-2状态,等待B发送连接释放请求。

第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。但B到A方向的连接仍然存在,B可以继续向A发送数据。

第三次挥手

当B向A发完所有数据后,向A发送连接释放请求,请求头:FIN=1,ACK=1,seq=w,ack=u+1。B便进入LAST-ACK状态。

第四次挥手

A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态。该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB。当B收到确认应答后,也便进入CLOSED状态,撤销TCB。

为什么A要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态?

为了保证B能收到A的确认应答。

若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。

应用层协议 – DNS域名解析

面试汇总(四):计算机网络常见面试总结(二)_Oliverfly1的博客-CSDN博客

域名解析过程:

(1)浏览器搜索自己的DNS缓存,缓存中维护了一张域名和IP地址的对应表

(2)若没有则搜索 *** 作系统的DNS缓存

(3)若没有则 *** 作系统将域名发送到本地域名服务器,本地域名服务器在自己的DNS缓存查找(递归查询)

(4)若没有则通过以下方式查找(递归查询/迭代查询)

  1. 本地域名服务器向根域名服务器发送请求,根域名服务器返回某一顶级服务器(如.com、.cn、.org)域名地址
  2. 本地域名服务器向com域顶级域名发送请求,com域顶级域名服务器返回权限域名服务器地址
  3. 本地域名服务器向权限域名服务器发送请求,得到IP地址

(5)本地域名将得到的IP地址返回 *** 作系统,同时自己也将IP地址缓存起来

(6) *** 作系统得到IP地址返回给浏览器,同时自己也将IP地址缓存起来

(7)浏览器得到IP地址

在浏览器键入URL后执行的全过程
  • 解析DNS

浏览器根据url查询对应的IP地址,分别查询浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名服务器缓存,查到即直接返回

  • TCP连接

与服务器进行三次握手,建立tcp连接

  • 发送HTTP请求

浏览器发送http请求给服务器

  • 服务器处理请求并返回HTTP响应报文
  • 浏览器解析渲染页面
  • 连接结束

四次挥手,浏览器释放tcp连接

说法二:

(1)应用层,通过DNS进行域名解析出IP地址,并发送HTTP请求

(2)传输层,为了传输方便,传输层选择协议(TCP协议或者UDP协议)对从应用层收到的数据(HTTP请求报文)进行封装(对收到的数据进行分割,并在各个报文上打上标记序号及端口号)后转发给网络层。

(3)网络层,通过IP协议将IP地址封装为IP数据报,此时会使用ARP协议主机发送信息时会将包含目标IP地址信息ARP请求广播到网络上所有的主机,并接受返回消息,以此确定目标的物理地址,找到目的的MAC地址

(4)把网络层交下来的IP数据添加首部和尾部,封装为MAC帧,根据目的MAC地址建立TCP连接(三次握手)

(5)物理层,数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。

说法三:

面试汇总(四):计算机网络常见面试总结(二)_Oliverfly1的博客-CSDN博客

浏览器中输入URL: 浏览器要将URL解析为IP地址,解析域名就要用到DNS协议,首先主机会查询DNS的缓存,如果没有就给本地DNS发送查询请求。DNS查询分为两种方式,一种是递归查询,一种是迭代查询。如果是迭代查询,本地的DNS服务器,向根域名服务器发送查询请求,根域名服务器告知该域名的一级域名服务器,然后本地服务器给该一级域名服务器发送查询请求,然后依次类推直到查询到该域名的IP地址。DNS服务器是基于UDP的,因此会用到UDP协议。

  得到IP地址后,浏览器就要与服务器建立一个http连接。因此要用到http协议,http协议报文格式上面已经提到。http生成一个get请求报文,将该报文传给TCP层处理,所以还会用到TCP协议。如果采用https还会使用https协议先对http数据进行加密。TCP层如果有需要先将HTTP数据包分片,分片依据路径MTU和MSS。TCP的数据包然后会发送给IP层,用到IP协议。IP层通过路由选路,一跳一跳发送到目的地址。当然在一个网段内的寻址是通过以太网协议实现(也可以是其他物理层协议,比如PPP,SLIP),以太网协议需要直到目的IP地址的物理地址,又需要ARP协议。

作用:

  1. 应用层是体系结构中的最高层。
  2. 传输层的任务就是负责主机中两个进程之间的通信。
  3. 网络层负责为分组交换网上的不同主机提供通信。
  4. 数据链路层的任务是将在网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送以帧为单位的数据。
  5. 物理层的任务就是透明地传送比特流。
TCP头和UDP头
  1. TCP头(定长20字节)

  • 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;
  • 32位序号/32位确认号: 不一定从0开始(作用:保证确认应答;保证数据按序到达;去重)
  • 4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP报头最大长度是15 * 4 = 60 字节
  • 6位标志位:

         URG: 紧急指针是否有效

         ACK: 确认号是否有效

         PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走

         RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段

         SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段

         FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段

  • 16位窗口大小: 接收缓冲区剩余的空间大小
  • 16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP 首部, 也包含TCP数据部分.
  • 16位紧急指针: 标识哪部分数据是紧急数据;

2.UDP头(8字节)

  •  16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度;
  • 如果校验和出错,就会直接丢弃。
TCP和UDP的区别

TCP(Transmission Control Protocol,传输控制协议)

UDP(User Data Protocol,用户数据报协议)

  • TCP是面向连接的,UDP是无连接的;
  • TCP可靠服务。通过TCP连接传送的数据、无差错、不丢失、不重复且按序到达->适合大数据量的交换,UDP尽最大努力交付。即不保证可靠传输交付;
  • TCP面向字节流,UDP面向报文。并且网络出现拥塞不会使得发送速率降低(因此会出现丢包对实时的应用比如IP电话和视频会议等);
  • TCP只能是点对点的,UDP支持1对1,1对多;
  • TCP的首部较大,为20字节,UDP只有8字节;
  • TCP保证数据顺序,UDP不保证数据顺序;
  • TCP对系统资源的要求比较多,UDP资源少,处理快。
如何防止TCP泛洪攻击?(大量的半连接状态,特别是源IP地址是随机的->SYN攻击)

防范措施:

  • 降低SYN-timeout时间,使得主机尽快释放半连接状态
  • 采用SYN cookie设置,如果短时间内收到某个IP的重复SYN请求,则认为收到了该IP的攻击,丢弃来自该IP的后续请求报文
  • 在网关处设置过滤,拒绝将一个源IP地址不属于其来源子网的包进行更远的路由
ping是通过什么协议实现的?

ICMP

如何实现UDP的可靠传输?
  • 传输层无法保证数据的可靠传输,只能通过应用层(超时重传、滑动窗口)来实现
  • 开源程序:RUDP、RTP、UDP
HTTP请求报文

http的优缺点:优点:无状态、明文传输

                        缺点:不安全

 

 HTTP响应报文格式

HTTP方法
  1. GET:获取资源,在网络请求中,绝大部分使用的是GET方法
  2. HEAD:获取报文首部,主要用于确认URL的有效性以及资源更新的日期等。
  3. POST:传输实体主体,POST主要用于传输数据,而GET主要用于获取数据
  4. PUT:上传文件,由于自身布袋验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用此方法。
  5. DELETE:删除文件,与PUT功能相反,并且同样不带验证机制。
  6. CONNECT:要求与代理服务器通信时建立隧道,使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

HTTP状态码

  1. 100:表明响应正常,客户端应继续执行后续 *** 作。
  2. 200:正常处理请求并相应
  3. 3XX:重定向,资源位置发生变动,需要客户端重新发送请求。
    1. 301:永久性重定向,请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。
    2. 302:临时性重定向,与301类似。但资源只是临时被移动。客户端应继续使用原有URI
    3. 304:未修改。表示请求的资源为修改,应该直接从浏览器缓存中取数据。
  4. 4XX:客户端错误
    1. 400:请求报文中存在语法错误
    2. 403:请求被拒绝
    3. 404:Not Found,不存在页面
  5. 5XX:服务器错误
    1. 500:服务器内部错误
    2. 503:服务器暂时出于超负荷或正在进行停机维护,现在无法处理请求

长连接与短连接

长连接只需要建立一次 TCP 连接就能进行多次 HTTP 通信。

  1. 从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用 Connection : close;
  2. 在 HTTP/1.0 默认是短连接的,如果需要使用长连接,则使用 Connection : Keep-Alive。
cookie

HTTP 协议是无状态的,主要是为了让 HTTP 协议尽可能简单,使得它能够处理大量事务。HTTP/1.1 引入 cookie 来保存状态信息。

cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。

用途

  1. 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  2. 个性化设置(如用户自定义设置、主题等)
  3. 浏览器行为跟踪(如跟踪分析用户行为等)
HTTPS是如何建立连接的?其间交互了什么?
  • 首先建立TCP连接:三次握手
  • 然后建立SSL/TLS连接
  • 发送HTTP请求
Session的工作原理
  • 写入Session列表
  • 服务器生成并发送cookie
  • 客户端接收并发送cookie
  • 从Session列表中查找
cookie和session的区别

cookie作用于客户端,Session作用于服务器端

cookie包含键              Session包含session id

流量控制:
  • 停止等待协议(超时重传)
  • 滑动窗口协议(位于发送窗口内的分组都可连续发送出去,而不需等待对方的确认)
  • 累积确认:序号、窗口大小、序号累加索引不同
TCP可靠传输的实现
  • 以字节为单位的滑动窗口
  • 超时重传的选择
  • 选择确认SACK

拥塞控制:

  • 慢开始 、拥塞避免、快重传、快恢复
五层模型

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4664924.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存