计算机网络知识点总结


知识点总结

各种地址及长度:

  • 传输层,port: 2B, 0-65535
  • 网络层,IP地址: 4B, 分成5类 (A类,B类,C类,D类, E类)
  • 数据链路层,mac地址: 6B,一般写成12位的Hex字符串。

网络协议:

所在层级 协议名称 全称 作用 端口
网络层 DHCP Dynamic Host Configuration Protocol 分配ip地址 —
应用层 SMTP simple mail transfer protocol email (基于tcp) 25
应用层 DNS Domain Name System 根据域名查询IP (基于udp) 53
应用层 POP Post Office Protocol authorization (agent <–>server) and download
应用层 IMAP Internet Mail Access Protocol 从mail server获取邮件
应用层 FTP File Transfer Protocol 本地机器和服务器间传输文件 21/20

头部结构表示长度的

  • UDP: Length: 占用2B, 最大值 2^16 –1 = 65535, 它包含UDP头部的8B,单位是字节。上层应用层的数据大小是,length - 8B
  • TCP: tcp头部的header size的占用4bit,总共可以表达0-15. 单位是 4B-word.
    含义是: the number of 4-byte words in the TCP header. 所以最多是15*4B = 60B头部
  • 网络层IP报文:
    • hdr length: 占用4-bit,表示范围0-15, 单位是4B-word, 可以表达的头部长度范围是: 20-60B
    • total length: 占用2B,表示范围0-65565,单位是字节,表示的是整个IP表文的字节数(包括IP头部)

总结,对比TCP Tahoe 和 TCP Reno

  • TCP Tahoe = Slow Start + AIMD + Fast Retransmit
    image-20220413194949316
  • TCP Reno = TCP Tahoe + Fast Recovery [触发的时机: 重复的ack]
    image-20220413195053964
  • Since TCP Reno is the extension of TCP Tahoe, the slow start and AIMD phase are the same. 对比如下:
    image-20220413195137484
  • 最先有TCP Tahoe,现在已经基本不用了,后来提出了TCP Reno,性能会好很多。

分层结构

  • OSI的七层模型

    • 各层使用的数据以及地址:

      层 数据 通信 地址
      物理层 比特 - Bit hop-to-hop,hop之间通信 –
      数据链路层 桢 - Frame hop-to-hop,hop之间通信 mac地址
      网络层 包 - Packet / Datagram host-to-host,主机之间的通信
      source node to destination node
      ip地址
      传输层 段 - Segment process-to-process,进程之间的通信 端口
    • 不同层对数据称呼不一样,使用的地址也不一样(往头部添加的内容不同)

    • OSI的七层模型,上面三层不是很熟悉,尤其是展示层(Presentation)和会话层(session)。 下面的4层熟悉一点。

  • 相关术语

    • 用于两人沟通的系统:Source – Transmitter — Transmission System – Receiver – Destination
    • 网络:Source, Destination, Transmitter, Hub, Router, Wireless Access Point, Receiver
    • 计算机网络:mobile network, global ISP, regional ISP, institutional network, home network

应用层

  • 大部分应用层协议使用TCP,所以只要记住哪些协议使用了udp即可: DNS

  • 各个应用层协议使用的端口和传输层协议

    协议 端口 传输层协议
    HTTP 80 tcp
    Mail Server 25 tcp
    SSH 22 tcp
    DNS 53 udp
    FTP 21-cmd, 20-data tcp

HTTP协议

需要了解报文格式 / 无状态 / 不同版本差异 / 持久和非持久连接 / Cookie / Cache / 常见状态码

  • HEAD 请求方法的作用?只请求页面的首部,用来获取请求中隐含的元信息,而不用传输实体本身。也经常用来测试超链接的有效性、可用性和最近的修改。
  • 一个HEAD请求的响应可被缓存,也就是说,响应中的信息可能用来更新之前缓存的实体。如果当前实体跟缓存实体的阈值不同(可通过Content-Length、Content-MD5、ETag或Last-Modified的变化来表明),那么这个缓存就被视为过期了。
    参考:https://www.jianshu.com/p/49ebc4a78474

DNS 协议

  • 两种查询方式(iterative迭代方式,recursive),查询到后也会缓存,

    • iterative方式查询域名: 除了本地计算机外,发起域名请求查询的全部是本地的DNS server。
    • recursive方式,则是询问的目标server,继续发起请求,得到结果之后,再返回给本地DNS服务器。【类似于函数的递归调用】
  • DNS record

    • Resource Record格式:(name, value, type, ttl)
    • 四种类型: A or AAAA-hostname to IP, CNAME - alias name, NS-domain-to-hostname, MX-mail server
  • TLD and Authoritative Servers

    • Top-level domain (TLD) servers: 顶级域名服务器, 例如 .com, .org, .net, .edu, .uk, .jp, .fr等等
    • Authoritative DNS servers:权威域名服务器,例如:一个组织的服务器,github.com
    • Local Name Server: 一般每个ISP运营商,公司,大学都有各自的server

电子邮件服务

SMTP,POP3,IMAP

  • email三个组成部分: user agent, mail server, SMTP协议
  • user agent (smtp client) 和mail server之间使用的协议是? HTTP, Pop3, 或者IMAP
    • 这三个协议之间有什么区别?
  • mail server <——> mail server 使用的是: SMTP
  • SMTP 协议细节 (HELO, MAIL FROM, RCPT TO, DATA, QUIT commands 各个作用)
    • DATA: indicate start of mail message. 命令之后,输入email内容
    • HELO: 客户端为标识自己的身份而发送的命令(通常带域名)
    • EHLO: 使服务器可以表明自己支持扩展简单邮件传输协议 (ESMTP) 命令。
    • MAIL FROM: 标识邮件的发件人;
    • RCPT TO: 标识邮件的收件人;
    • QUIT: 终止会话 (参考: https://www.cnblogs.com/cocowool/archive/2012/03/14/2395390.html)
    • SMTP server uses CRLF.CRLF to determine end of message. [其实就是 a dot by itself on a line]

传输层

问题:传输层实现可靠传输,为什么使用sequence number?

回答:解决3个问题:丢包,包损坏, 乱序

tcp

  1. 头部信息
    image-20220413112556521

    • tcp头部的header size的作用是?大小是4bit,总共可以表达0-15.
      含义是: the number of 4-byte words in the TCP header. 所以最多是15*4B = 60B头部
  2. Sliding window protocal: 滑动窗口协议

    • 目的:为了解决传输的不可靠性

      • packet损坏了: corrupt packet
      • packet顺序错乱了: out of sequence packet
      • packet丢失: 使用timeout机制
        • 没有timeout,怎么判断丢失了? sender收到receiver的两个相同的ack报文
        • 有了timeout机制,对于sender发出的每个packet,都要启动一个timer, 当timer结束之前,收到ack则认为发送成功。否则,会重发packet。(两种超时重发策略)
      • timeout expired
    • 两种策略:

      • Go-back-N 没有缓冲,直接丢弃掉corrupt packet以及之后的所有packet。【实现简单】
      • Selective Repeat: 有缓冲,只丢弃corrupt packet,对于后续的packet会缓冲起来 【实现复杂】
  3. Connection Management, 连接管理

    1. 三次握手
      1. 前面两次不能包含数据,第3次可以。
      2. 使用SYN 和 ACK标志: SYN; SYN, ACK; ACK.
    2. 四次挥手
      1. 发送和接收双方各自单独发起结束连接。
      2. 使用FIN标志,使用Timed wait来处理延迟的segment。【最后接收FIN的一方,发送的ACK,要使用time wait来处理,避免这个ack对方没有收到,从而对方再次发送FIN请求】
    3. 状态变迁:发起连接,等待建立连接,传输数据,结束连接。
      1. listen, syn_rcvd, established, close_wait, last_ack, closed
  4. TCP Congestion Control, 拥塞控制

    1. 网络拥堵的两个表现:丢包(lose packets) 和 长延时 (long delays)
    2. 解决拥塞的方法:
      1. 网络协助: 路由器给终端计算机反馈拥堵情况
      2. 端到端系统控制: [TCP采用]
        1. 逐步增加(幅度小)窗口大小,当有包丢失时,缩减窗口大小(幅度大)
        2. Additive-Increase Multiplicative-Decrease (AIMD)
        3. 如何知道Loss event? Timeout 或者 重复的Ack
        4. TCP传输的不同阶段
          1. 慢开始 (Slow start)
          2. 拥塞避免 (Congestion Avoidance)
          3. 拥塞控制 (Congestion Control)
          4. 快重传 / 快恢复 (Fast Retransmit / Recovery) 【只在TCP reno中出现,只跟dup acks关联】
        5. TCP Tahoe vs TCP Reno 看上面的总结。
          image-20220413195940285
  5. 疑问

    • RTT包含?发送 + ack确认,RTT = 2 * (Total Time), Total Time = 发送delay + 传输delay + 排队delay + 处理delay
    • 接受方的ack 确认的是已经收到的packet的编号? 不对,表示期待的下一个编号

udp

  • 常见使用UDP的应用层协议有: Skype等实时语音视频通话,NFS(网络文件系统)、SNMP(简单网络管理系统)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
  • UDP的头部
    image-20220413112629972
    • Length: 2B, 最大值 2^16 –1 = 65535, 它包含UDP头部的8B,单位是字节。
  • 特点

网络层

  • IP 报文的格式(IP datagram)
    image-20220413162402244

    • hdr length: 占用4-bit,表示范围0-15, 单位是4B-word? 总共能表达头部长度20-60B
    • total length: 占用2B,表示范围0-65565,单位是字节,表示的是整个IP表文的字节数(包括IP头部)
  • 分成5类,A,B,C,D,E
    image-20220413152745259

    • 给定一个ip地址,判断是哪一类的话?只需要把第一个字节写成二进制,看前几个bit有几个1,2个1是C,3个1是D。

    • 网络号占的字节数,ABC分别是1,2,3。对应的主机号字节数则是3,2,1.

    • IP地址划分:子网划分,拿B类举例,B类地址,主机号是2B =16位

      子网编号 子网个数 子网掩码
      1 2 128
      11 4 192
      111 8 224
      1111 16 240
      1111 1 32 248
      1111 11 64 252
      1111 111 128 254
      1111 1111 256 255

      有了上面的表格,给定一个ip和子网掩码就能得到: 200.45.34.56/20. (这是C类地址,第3个字节的4位作为子网号)

    • 特殊的IP地址
      image-20220413162156413

    • 划分子网
      image-20220413162251738

  • 常见的网络层协议:DHCP,IP,NAT

  • 当传输层的fragment传递到IP层时,如果数据比较大,那么IP层会给它分段。 MTU- max transmission unit

    • 因为不同的网络线路能传递的最大的网络报文长度不一样
    • IP头部有3个flg标志位指示是否分段: bit 0 保留,bit 1: DF (don’t fragment), bit 2: MF (more fragments)
    • 划分之后,会在目的机器上,重新组装成一个大的IP报文

数据链路层

基本数据单位是桢。

物理层

传输光电信号的。数据单位是bit。

实践

  • 使用wireshark观察各种协议的packet
  • 如果要实时抓取网卡数据的话,需要sudo权限启动Wireshart: sudo wireshark

相关计算

  • RTT计算:
    • 注意RTT表示一个往返(发送 + ack确认报文)
  • IP地址划分:
    • 给定一个address 和 mask 能计算出来三个信息,该网段的地址范围,以及总共多少个地址
      • 举例:167.199.170.82/27
        • 使用ubuntu自带的计算器,Programming mode,很方便地根据二进制计算10进制的值,然后根据10进制算出2进制。

非常好的网络资源

  1. IP Fragmentation in Detail - Packet Pushers
  2. IP Time to Live (TTL) and Hop Limit Basics - Packet Pushers
  3. 802.11 协议介绍 | Jiansoft
    1. 802.11 协议是位于最下两层(数据链路层 + 物理层)
    2. IEEE 802协议簇是指IEEE标准中关于局域网(LAN)和城域网(MAN)的一系列标准。
    3. IEEE 802中定义的服务和协议限定在OSI七层网络模型的最低两层,即数据链路层和物理层。
  4. Active_vs_Passive_FTP

文章作者: 量子数字
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 量子数字 !
  目录