面试必备——计算机网络

计算机网络

什么是 TCP/IP 协议

TCP 协议是面向连接的通信协议,就是在传输数据前先建立逻辑连接,然后提供可靠的无差错数据传输。

TCP报文格式:
  • 16位源端口号、16位目的端口(2字节 + 2字节)
  • 32位序列号(4字节)
  • 32位确认号(收到后需要得到确认)(4字节)
  • 4位首部长度,6位保留位,6个状态位,16位窗口(缓存)大小(4字节)
    • URG(紧急指针):若有紧急情况置为1
    • ACK(确认标记):对方收到就置为1
    • push(推应用):标记为1是传输完毕,数据可用
    • RST(重连标志):网络出现问题,请求重连时置为1
    • SYN(同步位):网络要建立连接时置为1
    • FIN(完成位):网络连接要中断时置为1
  • 16位 TCP 校验和(2字节)
  • 16位紧急指针(2字节)
  • 自定义的选项字段等等
TCP三次握手和四次挥手
  • 三次握手:客户端与服务器建立连接的过程(确认两个机器都能发送和接收信息)

    • 第一次:客户端发送连接请求报文段,报文段控制位 SYN=1,ACK=0,发送顺序号 seq= x(随机数),客户端进入SYN发送状态,等待服务器确认;
    • 第二次:服务器收到客户端发送的请求,服务器为该 TCP 连接分配缓存和变量,并向客户端返回确认报文段,标志位 SYN=1,ACK=1,发送顺序号 seq=y(随机数),接收顺序号 ack=x+1,服务器处于 SYN 接收状态。
    • 第三次:客户端收到服务器传来的报文,客户端为该 TCP 连接分配缓存和变量,并向服务器返回一个确认报文段,标志位 SYN=0,ACK=1,发送顺序号seq=x+1(随机数),接收顺序号 ack=y+1,客户端和服务器完成三次握手建立连接成功。
    点击查看源网页
  • 四次挥手:客户端与服务器断开连接的过程

    • 第一次:客户端发送连接释放报文段,并停止发送数据,FIN标志位为1,发送顺序号 seq 为 x,客户端进入终止等待1状态。
    • 第二次:服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,服务器进入关闭等待状态。
    • 第三次:客户端收到服务器的确认报文,进入终止等待2状态。服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器进入最后确认状态。
    • 第四次:客户端收到服务器的连接释放报文后发出确认,并进入时间等待状态,经过一段时间后,客户端 TCP 连接断开。服务器收到客户端发出的确认后,进入关闭状态。(服务器结束 TCP 连接比客户端早)
在这里插入图片描述
为什么是三次握手?
  • 第一次握手服务端确认自己收报文和客户端发报文正常
  • 第二次握手客户端确认自己首发报文和服务器发送报文正常——认为连接可建立
  • 第三次握手服务器确认双方收发报文都正常

若握手两次:第二次握手结束后,服务器确认可以连接,保留连接需要的资源,但客户端没有收到回应,则没有建立连接,出现大量情况会使得服务器崩溃(死锁);

若四次握手:目的就是为了提高可靠性,完全可靠的通信协议并不存在,四次不必要

为什么握手是三次,挥手是四次?

建立连接时,ACK 和 SYN 同时发送。

关闭连接时,服务器可能还需要发送一些数据,之后再发送 FIN,分开发送则需要四次。

TCP 四次挥手为什么需要等待 2MSL(报文存活时间)?
  • 若第四次挥手时发送的 ACK 报文丢失,超时后服务器会重新发送 FIN,客户端收到后会再次发送 ACK。
TCP 如何保证可靠传输
  • 数据包校验:用来检测数据在传输过程中的变化,若校验包出错,则丢弃报文等待超时重传。
  • 对失序数据包重排序:TCP 报文段是通过 IP 数据报来传输的,而IP数据报到达后可能失序,那么 TCP 报文段的到达也可能失序。TCP 将对失序的数据进行重排列。
  • 丢弃重复数据
  • 应答机制:收到完整数据发送确认信息
  • 超时重发:当 TCP 发出一个报文段后,启动定时器,在规定时间内未收到确认信息将重发此报文段。
  • 流量控制:TCP 连接的双方都有固定大小的缓冲空间。TCP 的接收端只允许另一端发送缓冲区可容纳的数据,这可以防止缓冲区溢出。
TCP 流量控制 和 拥塞控制
  • 流量控制

    • 基于滑动窗口协议的流量控制机制实现流量控制
    • 通信过程中,接收方根据自己接收缓存的大小,动态调整发送方发送窗口的大小
    • 传输层和数据链路层流量控制的区别:
      • 传输层:端到端用户之间的流量控制,窗口可以动态变化
      • 数据链路层:两个中间的相邻相邻节点的流量控制,窗口不能动态变化
  • 拥塞控制

    ——防止网络资源需求超过所能提供的部分而造成网络性能变差

    查看源图像

    • 慢启动:当发送方收到一个 ACK(确认字符),拥塞窗口的大小就会以 2 的 n 次方递增,是一个指数级的增长。
      • 拥塞窗口数 < 慢开始阈值 时,使用慢开始算法
      • 拥塞窗口数 > 慢开始阈值 时,使用拥塞避免算法
    • 拥塞避免:
      • 加法增大:每经过一个往返时间,拥塞窗口加一,让拥塞窗口缓慢增大
      • 乘法减小:当出现网络拥塞,将慢开始阈值设为原来的一半,再将拥塞窗口数设为1,重新执行慢开始
    • 快重传:为了减少因为拥塞导致的数据丢包带来的重传时间
      • 接收方如果丢失一个包,则只是发送重传该包的请求
    • 快恢复算法:
      • 一旦发送方接收到三个一样的确认,就知道出现了错误,重传啊该包
      • 此时开始执行快恢复算法
      • 慢开始阈值减半
      • 拥塞窗口数设为慢开始阈值减半后的数量
      • 执行拥塞避免算法
TCP / IP 协议参考模型把所有的 TCP / IP 系列协议归类到四个抽象层中
  • 应用层:允许访问OSI环境的手段,TFTP,HTTP,SNMP,FTP,Telnet 等等
  • 表示层:对数据翻译、加密和压缩(表示协议数据单元PPDU)
  • 会话层:建立、管理和终止会话(会话协议数据单元SPDU)
  • 传输层:提供端到端的可靠报文传递和错误恢复,(报文段),TCP,UDP
  • 网络层:将 IP 数据报传递,(数据包),IP,ICMP,OSPF,EIGRP,IGMP
  • 数据链路层:将比特流封装成帧点到点传递,(帧),SLIP,CSLIP,PPP,MTU
  • 物理层:传输比特流(比特)
TCP 和 UDP 的区别
  • TCP 提供面向连接的、可靠的数据传输;UDP 提供非面向连接的、不可靠传输

  • TCP 通过 TCP 连接传送数据,无差错、不丢失、不重复和按序到达,提供可靠交付

    UDP 不保证可靠交付

  • TCP 面向字节流;UDP 面向报文

  • TCP 是点到点传输;UDP 可以一对一、一对多、多对一通信

  • TCP 首部开销20字节;UDP 首部开销8字节

get 和 post 的区别
  • get 用于从服务器查询数据,post 用于向服务器提交数据
  • get 通过 url 传递数据,post 通过 http 请求传递数据
  • get 传输数据量不能大于2kb,post 可以传递大量的数据
  • get 可能会在 url 中暴露数据,没有 post 安全
cookie 和 session 的区别
  • cookies 数据存放在客户浏览器上,session 数据存放在服务器上
  • cookies 存储信息不足够安全,可通过分析本地 cookies 获取用户信息
  • session 保存在服务器上,访问量多时要考虑减轻服务器占用
  • 一般将登录信息存放为 session,其他要保留的信息存放在 cookie 中
HTTP 协议
  • HTTP 协议 —— 超文本传输协议
  • 传输层使用 TCP 协议,网络层使用 IP 协议
http 和 https 的区别

HTTPS 是基于 HTTP 协议,通过 SSL 或 TLS 提供加密处理数据、验证对方身份以及数据完整性保护

  • 工作层:HTTP工作于应用层,而 HTTPS 工作在传输层。
  • 连接端口:HTTP标准端口为80,而 HTTPS标 准端口为443。
  • 传输方式:HTTP是超文本传输协议,信息是明文传输,而 HTTPS 是 SSL 加密传输协议。
  • 工作耗时:HTTP耗时=TCP握手,而 HTTPS 耗时=TCP握手+SSL握手。
  • 显示形式:HTTP的URL以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头。
  • 安全性:HTTP的连接简单,是无状态的;而 HTTPS 是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
IP 地址 和 MAC 地址的区别
  • MAC 地址:每个网卡都需要并有唯一一个MAC地址,应用于局域网。

  • IP 地址:

    • IP 地址是 Internet 中主机的标识

    • IP 地址分为32位(IPV4)和128位(IPV6)——扩展了网络地址

    • 每个数据包都携带目的地址和源IP地址,路由器以此为数据包选择路由

    • IP 地址 = 网络号 + 主机号

      • A类:1字节的网络地址和3字节主机地址——为大型网络所用

      • B类:2字节的网络地址和2字节主机地址

      • C类:3字节的网络地址和1字节主机地址,最高位是110

      • 广播地址:主机号全为1

    • 掩码:网络号全为1,主机号全为0,用于计算网络号地址

一次完整的 HTTP 请求过程

域名解析找到 IP 地址 (浏览器、系统、路由器缓存) --> 发起 TCP 的3次握手 --> 建立 TCP 连接后发起 HTTP 请求 --> 服务器响应 HTTP 请求,浏览器得到 HTML 代码 --> 浏览器解析 HTML 代码,并请求 HTML 代码中的资源 --> 浏览器对页面进行渲染呈现给用户

  • 用到的协议:
    • 应用层:HTTP、DNS(域名解析服务)
    • 传输层:TCP(为 HTTP 提供可靠的数据传输)、UDP(DNS 使用 UDP 传输)
    • 网络层:IP(IP 数据包传输和路由选择)、ICMP(提供网络传输过程的差错检测)、ARP(将本机的默认网关 IP 地址映射成物理 MAC 地址)
TCP/IP 与 HTTP 的关系
  • HTTP 协议是应用层协议,主要解决如何包装数据,是基于TCP连接的

    TCP/IP 协议是传输层协议,主要解决数据在网路中如何传输的问题

  • HTTP协议是获取地址,是一种基于请求与响应模式的应用层的协议

    TCP是服务器和客户端可以互相发送消息的交互模式

TCP 连接与 Socket 连接的关系
  • Socket 是应用层与传输层之间的一个抽象层,Socket 连接基于 TCP 或 UDP
  • 基于 TCP 连接的 Socket 连接同样是可靠的
HTTP 连接和 Socket 连接的区别
  • HTTP 是短链接,Socket 是长连接

    HTTP 无法保证始终连接,而 Socket 连接一旦建立 TCP 三次握手,除非一方断开,否则一直连接。

  • 使用场景:

    • 用 HTTP :双方不需要时刻保持连接,如资源获取、文件上传。
    • 用 Socket :即时通讯应用,如 QQ、微信。
什么是 SYN flood 攻击,如何应对?

客户端发送连接请求后,服务器返回,但未收到确认,成为半连接状态。大量的这类资源占用服务器的分配资源,使得正常资源无法得到处理。(短时间内攻击者发送大量 SYN)

解决方法:SYN cookie(半连接和长连接)长连接和短链接

  • 长连接:在一个 TCP 连接上可连续发送多个数据包,在 TCP 连接保持期间,若没有数据包发送,需要双方发心跳包维持连接。
  • 短链接:通信双方有数据交互时,就建立 TCP 连接,数据发送完成后,就断开连接。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值