「生活可以更简单, 欢迎来到我的开源世界」
  1. 各层作用及协议
  2. 物理层
  3. 数据链路层
  4. 网络层
    1. IP网际协议
  5. 运输层
    1. TCP
    2. UDP
    3. TCP 黏包问题
      1. 原因
      2. 解决
    4. TCP 流量控制
      1. 概念
      2. 方法
    5. TCP 拥塞控制
      1. 概念
      2. 方法
    6. TCP 传输连接管理
      1. TCP 三次握手建立连接
      2. TCP 为什么要进行三次握手?
      3. TCP 四次挥手释放连接
      4. TCP 为什么要进行四次挥手?
    7. TCP 有限状态机
  • 应用层
    1. DNS
    2. FTP
    3. TELNET
    4. WWW
      1. URL
      2. HTTP
      3. 其他协议
  • 计算机网络简述
    2018-07-05

    本节部分知识点来自《计算机网络(第 7 版)》

    计算机网络体系结构:

    image-20200717102522812

    各层作用及协议

    分层 网络设备 基本数据单位(都可称分组) 协议 作用
    物理层 中继器、集线器 比特 Bit RJ45、CLOCK、IEEE802.3 通过媒介传输比特,确定机械及电气规范
    数据链路层 网桥、二层交换机 帧 Frame PPP、FR、HDLC、VLAN、MAC 将比特组装成帧和点到点的传递
    网络层 三层交换机、路由器 包 Packet IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP 负责数据包从源到宿的传递和网际互连
    运输层 段 Segment TCP、UDP、SPX 提供端到端的可靠报文传递和错误恢复
    应用层 应用协议数据单元 APDU FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS 允许访问OSI环境的手段

    image-20200717104719878

    image-20200717104731449

    物理层

    数据通信系统:源系统(或发送端、发送方)–> 传输系统(或传输网络)–> 目的系统(或接收端、接收方)

    通道:

    物理层下面的传输媒体:

    通道复用技术:

    数据链路层

    主要信道:

    MAC帧格式:

    image-20200717174106393

    网络层

    相关协议:

    IP网际协议

    IP 地址 ::= {<网络号>,<主机号>}

    IP 地址类别 网络号 网络范围 主机号 IP 地址范围
    A 类 8bit,第一位固定为 0 0 - 127 24bit 1.0.0.0 - 127.255.255.255
    B 类 16bit,前两位固定为 10 128.0 - 191.255 16bit 128.0.0.0 —— 191.255.255.255
    C 类 24bit,前三位固定为 110 192.0.0 - 223.255.255 8bit 192.0.0.0 - 223.255.255.255
    D 类 前四位固定为 1110,后面为多播地址
    E 类 前五位固定为 11110,后面保留为今后所用

    image-20200717172052278

    IP数据包格式:

    image-20200717173956445

    运输层

    协议:

    端口:

    应用程序 FTP TELNET SMTP DNS TFTP HTTP HTTPS SNMP
    端口号 21 23 25 53 69 80 443 161

    TCP

    特征:

    TCP 如何保证可靠传输:

    TCP 报文结构

    TCP 报文

    TCP 首部

    TCP 首部

    TCP:状态控制码(Code,Control Flag),占 6 比特,含义如下:

    UDP

    特征:

    UDP 报文结构

    UDP 报文

    UDP 首部

    UDP 首部

    TCP 与 UDP 的区别

    1. TCP 面向连接,UDP 是无连接的;
    2. TCP 提供可靠的服务,也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP 尽最大努力交付,即不保证可靠交付
    3. TCP 的逻辑通信信道是全双工的可靠信道;UDP 则是不可靠信道
    4. 每一条 TCP 连接只能是点到点的;UDP 支持一对一,一对多,多对一和多对多的交互通信
    5. TCP 面向字节流(可能出现黏包问题),实际上是 TCP 把数据看成一连串无结构的字节流;UDP 是面向报文的(不会出现黏包问题)
    6. UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 IP 电话,实时视频会议等)
    7. TCP 首部开销20字节;UDP 的首部开销小,只有 8 个字节

    TCP 黏包问题

    原因

    TCP 是一个基于字节流的传输服务(UDP 基于报文的),“流” 意味着 TCP 所传输的数据是没有边界的。所以可能会出现两个数据包黏在一起的情况。

    解决

    TCP 流量控制

    概念

    流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。

    方法

    利用可变窗口进行流量控制

    TCP 拥塞控制

    概念

    拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

    方法

    TCP的拥塞控制图



    TCP 传输连接管理

    因为 TCP 三次握手建立连接、四次挥手释放连接很重要,所以附上《计算机网络(第 7 版)-谢希仁》书中对此章的详细描述:<./images/TCP-transport-connection-management.png>

    TCP 三次握手建立连接

    UDP 报文

    【TCP 建立连接全过程解释】

    1. 客户端发送 SYN 给服务器,说明客户端请求建立连接;
    2. 服务端收到客户端发的 SYN,并回复 SYN+ACK 给客户端(同意建立连接);
    3. 客户端收到服务端的 SYN+ACK 后,回复 ACK 给服务端(表示客户端收到了服务端发的同意报文);
    4. 服务端收到客户端的 ACK,连接已建立,可以数据传输。
    TCP 为什么要进行三次握手?

    TCP是全双工的,通信双方都需要确认一些信息。

    【答案一】因为信道不可靠,而 TCP 想在不可靠信道上建立可靠地传输,那么三次通信是理论上的最小值。(而 UDP 则不需建立可靠传输,因此 UDP 不需要三次握手。)

    Google Groups . TCP 建立连接为什么是三次握手?{技术}{网络通信}

    【答案二】因为双方都需要确认对方收到了自己发送的序列号,确认过程最少要进行三次通信。

    知乎 . TCP 为什么是三次握手,而不是两次或四次?

    【答案三】为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

    《计算机网络(第 7 版)-谢希仁》

    TCP 四次挥手释放连接

    UDP 报文

    【TCP 释放连接全过程解释】

    1. 客户端发送 FIN 给服务器,说明客户端不必发送数据给服务器了(请求释放从客户端到服务器的连接);
    2. 服务器接收到客户端发的 FIN,并回复 ACK 给客户端(同意释放从客户端到服务器的连接);
    3. 客户端收到服务端回复的 ACK,此时从客户端到服务器的连接已释放(但服务端到客户端的连接还未释放,并且客户端还可以接收数据);
    4. 服务端继续发送之前没发完的数据给客户端;
    5. 服务端发送 FIN+ACK 给客户端,说明服务端发送完了数据(请求释放从服务端到客户端的连接,就算没收到客户端的回复,过段时间也会自动释放);
    6. 客户端收到服务端的 FIN+ACK,并回复 ACK 给客户端(同意释放从服务端到客户端的连接);
    7. 服务端收到客户端的 ACK 后,释放从服务端到客户端的连接。
    TCP 为什么要进行四次挥手?

    【问题一】TCP 为什么要进行四次挥手? / 为什么 TCP 建立连接需要三次,而释放连接则需要四次?

    【答案一】因为 TCP 是全双工模式,客户端请求关闭连接后,客户端向服务端的连接关闭(一二次挥手),服务端继续传输之前没传完的数据给客户端(数据传输),服务端向客户端的连接关闭(三四次挥手)。所以 TCP 释放连接时服务器的 ACK 和 FIN 是分开发送的(中间隔着数据传输),而 TCP 建立连接时服务器的 ACK 和 SYN 是一起发送的(第二次握手),所以 TCP 建立连接需要三次,而释放连接则需要四次。

    【问题二】为什么 TCP 连接时可以 ACK 和 SYN 一起发送,而释放时则 ACK 和 FIN 分开发送呢?(ACK 和 FIN 分开是指第二次和第三次挥手)

    【答案二】因为客户端请求释放时,服务器可能还有数据需要传输给客户端,因此服务端要先响应客户端 FIN 请求(服务端发送 ACK),然后数据传输,传输完成后,服务端再提出 FIN 请求(服务端发送 FIN);而连接时则没有中间的数据传输,因此连接时可以 ACK 和 SYN 一起发送。

    【问题三】为什么客户端释放最后需要 TIME-WAIT 等待 2MSL 呢?

    【答案三】

    1. 为了保证客户端发送的最后一个 ACK 报文能够到达服务端。若未成功到达,则服务端超时重传 FIN+ACK 报文段,客户端再重传 ACK,并重新计时。
    2. 防止已失效的连接请求报文段出现在本连接中。TIME-WAIT 持续 2MSL 可使本连接持续的时间内所产生的所有报文段都从网络中消失,这样可使下次连接中不会出现旧的连接报文段。

    TCP 有限状态机

    TCP 有限状态机图片

    TCP 的有限状态机

    应用层

    DNS

    域名:

    FTP

    TELNET

    WWW

    URL

    标准格式:

    完整格式:

    其中【访问凭证信息@;:端口号;?查询;#片段ID】都属于选填项
    如:https://github.com/huihut/interview#cc

    HTTP

    HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信的基础。

    请求方法

    方法 意义
    OPTIONS 请求一些选项信息,允许客户端查看服务器的性能
    GET 请求指定的页面信息,并返回实体主体
    HEAD 类似于 get 请求,只不过返回的响应中没有具体的内容,用于获取报头
    POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改
    PUT 从客户端向服务器传送的数据取代指定的文档的内容
    DELETE 请求服务器删除指定的页面
    TRACE 回显服务器收到的请求,主要用于测试或诊断

    状态码(Status-Code)

    更多状态码:菜鸟教程 . HTTP状态码

    其他协议
    <⇧>