计网总结

包交换 vs 电路交换网络

  • 电路交换
    • 需要建立连接 和 专用物理线路 线路利用率低 没有转发机制
    • 容易受网络中断影响
  • 包交换
    • 更灵活 不需要专用线路 可以线路复用 线路利用率高
    • 不容易受网络中断影响

时延

E2E总时延 = 排队时延 + 处理时延 + 传输时延 + 传播时延

P2P总时延 = 传输时延 + 传播时延

传输过程和基本术语

Message “报文” - Segment “报文段” - Datagram / Packet “数据报 / 包” - Frame“帧” - bit

img

https://blog.csdn.net/a3192048/article/details/84671340

  • Links: 链路 连接节点的物理介质

  • Service / Interface: between layering

  • Protocol: between peer

  • E2E Client to Server P2P otherwise

  • 根据信息在传输线上的传送方向,分为以下三种通信方式:

    • 单工通信Simplex:单向传输
    • 半双工通信Half-duplex:双向交替传输
    • 全双工通信Duplex:双向同时传输
  • 局域网:多种不同结构

    • 局域网是一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限。有多种局域网技术,其中以太网占主导地位。可以按照网络拓扑结构对局域网进行分类:星 环 直线
  • 以太网:星形结构局域网 中间使用集线器或交换机连接

  • MAC地址 链路层地址 48位 设备网卡的唯一标识 有多少个适配器=多少个mac地址 os可更换

  • Switch交换机 Hub集线器 Router路由

    • Hub 集线器 [layer1] enables mulitple hosts to create a broadcast Channel (only floods) 作用于物理层的 能使多个主机 创建一个广播频道的设备 具备多个网口,专门实现多台计算机的互联作用。
    • Switch 交换机 [layer 2] 收处理转发以太网帧到网络中的其他设备 会维护一个<mac link/接口> 表 “交换表” 表类似一个LRU缓存 因此能够实现mac地址识别=说它具有“学习能力”. Can have simultaneous p2p connectivity between different hosts
    • Router 路由 [layer 3] 根据routing table提供转发和路由两种功能 转发:将数据包移送到合适输出端 路由:决定数据包的路由路径。
  • Bridge Repeater Gateway

    • Repeater 中继器**[layer 1]** receive and repeat/regenerate signal
    • Bridge 网桥**[layer 2]** 连接两个局域网
    • Gateway 网关 [layer 3] 两个不同网络之间的关口设备

IP-service model / IP best-effort network /最大努力网络

  • packets may lose, duplicate, reorder

  • connectionelss best-effort destination based forwarding.

Layering & Architecture

  • OSI architecture 应用层传输层之间多了session(建立及管理会话) presentation(数据压缩、加密以及数据描述)
  • TCP/IP architecture 将物理层和数据链路层合并为“网络接口层”

Application Layer

E2E用户服务 HTTP FTP DNS DHCP 远程登录 邮件

Transport Layer

E2E 为应用进程提供端到端的通信服务 在应用层和网络层之间multiplexing和demultiplexing TCP UDP

Hide defects and limitations of the network

Fragmentation & reassembly

resend defect packets

  • TCP
    • Connection oriented: need to set up connection (has overhead)
    • Reliable: it will make sure packets get through, if lost/corrupted resend packet
    • Flow control: “making sure receiver not overwhelmed”
    • Congestion control: “making network is not overloaded”
  • UDP
    • Connectionless: no need to set up connection, if need to send just send
    • Unreliable best-effort
    • No Flow control
    • No Congestion control

No timing / throughput / security gurantee

Why should we even bother using UDP ? you have a lot more control when having a tradeoff

Network Layer

P2P Addressing, Routing, Congestion control 点对点寻址,路由,拥塞控制 Moving data between networks. 涉及协议: IP, ARP, ICMP and routing protocol

  • Addressing

    • IP: 沙漏结构的中点,将异构网络连接起来,使之看起来像个统一的网络

      • IP is a unreliable protocol because it does not guarantee the delivery of a datagram to its destination. The reliability must be provided by the upper layer protocols like TCP. IP does not support flow control, retransmission, acknowledgement and error recovery.
      • 地址系统
        • Class-based addressing (过去版本): lead to problem of large #networks in routing table
        • Subnetting and supernetting 子网与超网
          • subnet ip = subnet mask & host ip address
          • Supernetting: classless interdomain routing CIDR 无分类跨网地址系统
            • ip地址=网络前缀+主机号 128.14.35.7/20 表示前 20 位为网络前缀。
            • 意义:减少了路由表项 查找时采取最长前缀匹配原则选择哪一个
      • Fragmentation/Reassembly 报文的拆分重组: enabling heterogenous system to transmit their own “max pkt” 和tcp合作 tcp负责mtu discovery
      • Error reporting and control (ICMP) 错误报告和控制
        • img
        • 封装在 IP 数据报中,但是不属于高层协议。
        • ping 用来测试两台主机之间的连通性 通过icmp echo实现
      • Traceroute 追踪一个数据包路径: 封装一个无法交付的udp包, 利用IP协议的“ttl”字段,尝试从每个网关到某个主机的路径引发ICMP 超时响应。
      • IP packet format
      img
  • Routing

    • How does router figure out MAC

      • ARP: routers and hosts maintain an dynammic <IP, MAC> cache, this table is called ARP table

        If IP is not in ARP table, broadcast ARP request, hosts that have that IP address will responds

    • Types & protocols used

      • Intra-domain
        • RIP Routing Information Protocol: rely on local computation in all nodes
          • Distance Vector Protocol (based on Bellman-ford)
        • OSPF Open Shortest Path First Protocol: no local computation faster loop-free convergence
          • Link state Protocol (based on Dijkstra’s shortest path)
      • Inter-domain
        • BGP Border Gateway Protocol

P2P 相邻网络节点/主机的数据传输和控制 局域网(LAN) 广域网(WAN)

  • Framing 把网络层传下来的包封装成帧 加个开始和结束
  • P2P点对点服务: Logical link control (LLC)
    • Error Detection CRC checksum
    • Flow Control “making sure receiver not overwhelmed”
  • Broadcast广播服务: Media access control (MAC)
    • Frames synchronization 帧的同步 clock based, character counting, byte stuffing.
    • Channel sharing 信道共享- methods:
      • 信道复用:时分,频分,码分
      • 交替:轮询,令牌传递
      • 随机访问 主要例子:Aloha, Ethernet
        • Ethernet MAC采用CSMA/CD协议 (Carrier Sense Multiple Access / Collision Detection) 载波监听多点接入/碰撞检测
          • Only if line is idle, start to send immediately (Carrier Sense 载波监听)
          • if busy wait for “inter-frame gap” = 96 bit time
          • if collision detected, send jam signal, do binary exponential backoff “nth randomly choose k from {0,1,2,…,2^n-1}, then delay k*51.2 μs” 二进制指数后退 collision domain = 1 RTT

Physical Layer

P2P transmission of raw bits

Application Layer

  • 2 different Architecture: Client Server / Peer to Peer

  • Socket = Door

    • Transport Layer = hallway
  • IP + port determines host & process

  • Public Domain Protocols Propertiary protocol Skype … etc.

    • HTTP
    • FTP
    • SMTP
    • BitTorrent
  • 不同情况下应用有不同需求 data loss vs time-sensitive vs throughput

常用端口

应用 应用层协议 端口号 传输层协议 备注
域名解析 DNS 53 UDP/TCP 长度超过 512 字节时使用 TCP
动态主机配置协议 DHCP 67/68 UDP
超文本传送协议 HTTP 80 TCP
文件传送协议 FTP 20/21 TCP 数据连接 20,控制连接 21
远程终端协议 TELNET 23 TCP ssh = 22
简单网络管理协议 SNMP 161/162 UDP
简单邮件传送协议 SMTP 25 TCP
邮件读取协议 POP3 110 TCP
网际报文存取协议 IMAP 143 TCP

Web and HTTP

FTP

使用TCP进行连接, 使用2个连接来传输一个文件

  • 控制连接:服务器打开端口号 21 等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答。
  • 数据连接:用来传送一个文件数据

根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式:

  • 主动模式:服务器端主动建立数据连接,服务器端端口号 20,客户端端口号1024 - 65535随机(因为 0~1023 是熟知端口号)。

img

  • 被动模式:服务器端被动,客户端主动建立数据连接,客户端端口号自己指定,服务器端的端口号随机。

img

主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。

DNS

dns dns recdns

DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种特殊情况下会使用 TCP 进行传输:

  • 如果返回的响应超过 512 字节(UDP 最大只支持 512 字节的数据)。
  • DNS zone transfer

DNS 负载均衡

同一主机在dns服务器里配置多个主机记录=多个不同服务器ip,dns服务器解析域名时会轮询,这就完成了简单的负载均衡。

DHCP

只适用于动态ip分配的情形,如进入一个新的移动网络。 主机不知道自己ip地址 ask dhcp server

DHCP (Dynamic Host Configuration Protocol) 是用于动态ip分配和配置的协议。

DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。

DHCP 工作过程如下:

  1. 客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。
  2. DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。
  3. 如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。
  4. DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。

img

远程登录协议

SSH TELNET

电子邮件协议

发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。

Web页面请求过程

1. DHCP 配置主机信息

  • 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。
  • 主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口 68 的 UDP 报文段中。
  • 该报文段则被放入在一个具有广播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 数据报中。
  • 该数据报则被放置在 MAC 帧中,该帧具有目的地址 FF:FF:FF:FF:FF:FF,将广播到与交换机连接的所有设备。
  • 连接在交换机的 DHCP 服务器收到广播帧之后,不断地向上分解得到 IP 数据报、UDP 报文段、DHCP 请求报文,之后生成 DHCP ACK 报文,该报文包含以下信息:IP 地址、DNS 服务器的 IP 地址、默认网关路由器的 IP 地址和子网掩码。该报文被放入 UDP 报文段中,UDP 报文段有被放入 IP 数据报中,最后放入 MAC 帧中。
  • 该帧的目的地址是请求主机的 MAC 地址,因为交换机具有自学习能力,之前主机发送了广播帧之后就记录了 MAC 地址到其转发接口的交换表项,因此现在交换机就可以直接知道应该向哪个接口发送该帧。
  • 主机收到该帧后,不断分解得到 DHCP 报文。之后就配置它的 IP 地址、子网掩码和 DNS 服务器的 IP 地址,并在其 IP 转发表中安装默认网关。

2. ARP 解析 MAC 地址

  • 主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。
  • 主机生成一个 DNS 查询报文,该报文具有 53 号端口,因为 DNS 服务器的端口号是 53。
  • 该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中。
  • 该 IP 数据报被放入一个以太网帧中,该帧将发送到网关路由器。
  • DHCP 过程只知道网关路由器的 IP 地址,为了获取网关路由器的 MAC 地址,需要使用 ARP 协议。
  • 主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文放入一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。
  • 网关路由器接收到该帧后,不断向上分解得到 ARP 报文,发现其中的 IP 地址与其接口的 IP 地址匹配,因此就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。

3. DNS 解析域名

  • 知道了网关路由器的 MAC 地址之后,就可以继续 DNS 的解析过程了。
  • 网关路由器接收到包含 DNS 查询报文的以太网帧后,抽取出 IP 数据报,并根据转发表决定该 IP 数据报应该转发的路由器。
  • 因为路由器具有内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,因此路由表中已经配置了网关路由器到达 DNS 服务器的路由表项。
  • 到达 DNS 服务器之后,DNS 服务器抽取出 DNS 查询报文,并在 DNS 数据库中查找待解析的域名。
  • 找到 DNS 记录之后,发送 DNS 回答报文,将该回答报文放入 UDP 报文段中,然后放入 IP 数据报中,通过路由器反向转发回网关路由器,并经过以太网交换机到达主机。

4. HTTP 请求页面

  • 有了 HTTP 服务器的 IP 地址之后,主机就能够生成 TCP 套接字,该套接字将用于向 Web 服务器发送 HTTP GET 报文。
  • 在生成 TCP 套接字之前,必须先与 HTTP 服务器进行三次握手来建立连接。生成一个具有目的端口 80 的 TCP SYN 报文段,并向 HTTP 服务器发送该报文段。
  • HTTP 服务器收到该报文段之后,生成 TCP SYN ACK 报文段,发回给主机。
  • 连接建立之后,浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。
  • HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。
  • 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。

TCP/UDP

  • UDP header:src port, dest port, header length, checksum

  • TCP header:

    • SRC,DST ports (16-bit each)
    • Sequence #序号, Ack #确认号(32-bit each) 序号:当前数据段第一个字节编号 确认号:期望下个数据段第一个字节编号
    • Header length(data offset), reserve flags(indicate pkt types) SYN FIN ACK
    • Receive window (16-bits that specify how big my receive buffer is) important for flow control
    • Check sum, Urgent Ptr: can be used by app to indicate a receiving host need to pay attention about packets but most case is ignored.
    • Options
  • TCP

    • 全双工:代表建立连接后可以双向传送接受数据
    • 以连接为导向: 意味着需要主动建立连接
    • 可以提供包级别的可靠传输 什么是包级别的可靠传输:udp只提供位级别的可靠传输 由checksum实现 只能进行简单的检测看看数据是否污染,包级别可靠传输 在网络层 也就是基本的的ip-service model=best-effort destination-based forwarding里是不能够被保证的,但是我们在很多实际应用中又需要这个保证,所以就在传输层由tcp来做:保证包级别可靠传输主要靠两个机制:
      • 接收方发送确认ack 就是要求接受者每次接收到数据都要回复发送方 说一声我收到了 只有这个确认机制只能保证我们可以收到包,还不够,有问题的包还需要进行恢复
      • 计时器/超时检测机制 解决了“什么时候重新发没收到的/有问题的包” 他的机制很简单:只要超时了 就要重发 超时标准要比RTT稍微多一点尽量接近RTT, RTO新= RTO旧*2 by karn’s algorithm
    • 提供流量控制:确保接收方的buffer不会overflow
      • 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
    • 提供拥塞控制:与整个网络有关, 网络比较拥挤的时候控制发送方的窗口。增加一个congestion window CWND
      • send window (#unacknowledge pkts in flight) = min(CWND, RWND) 当cwnd更小时,我们就进入了一个拥塞控制的模式
        • 慢开始与拥塞避免
          • cwnd := 1, cwnd++ for each ack == cwnd*2 each RTT
          • cwnd >= ssthresh do congestion avoidance: cwnd++ for each RTT;
        • 快重传和快恢复 on dupack fast retransmit the next sequence from receiver side. Fast recover it by setting ssthresh = cwnd/2, cwnd = ssthresh, do congestion avoidance

三次握手建立连接 四次挥手关闭连接

img
  • 为什么需要三次握手:TCP是一个全双工通信协议,也就是说它是双向收发的。初始序号是两边都要随机选择, 这个主要是因为安全问题要避免TCP sequence prediction attack的。然后,因为两方都要告诉对面自己的初始序号 = 也就是通信双方数据原点的位置所以至少要4次握手。SYN ACK SYN ACK, 然后因为tcp header里reserve flags部分SYN ACK是可以同时为1的 中间两个步骤可以合并 所以3次就够。

  • 第三次握手过程中sender可以piggypack data而receiver只能在这次握手结束才可以。

  • 在socket编程中,客户端执行connect()时,将触发三次握手。

img
  • 四次挥手是因为tcp是双向的性质+tcp半关闭造成的。假如客户端主动关闭,那么直到客户端收到服务器的ack前,数据传输仍然可以从服务器到客户端进行,tcp是半关闭的client-server关了但server-client方向还没关,这也是为什么有close-wait状态的原因,服务器端要等待最后这一波数据传输的完成。所以这也解释了中间两次为什么不能像建立连接一样合并。当服务器没有数据要传时他就可以通过fin来释放自己方向的连接了。

  • TIME_WAIT / 2MSL等待状态: 首先被动方如果接受了ack不需要等,因为他已经完成同步了可以释放资源了。然后主动方必须要等因为他不知道自己发的ack对面收没收到。这里需要假设没收到。那么它需要等待来自对面的超时重传消息,这最坏情况要1MSL。然后他等到了的话又要发ack回去。所以主动方要等最坏情况一个来回2MSL。

  • 在socket编程中,任何一方执行close()操作即可产生挥手操作。

应用层面实现可靠传输-发收双方缓存工作原理:滑动窗口

  • Buffers on senders and receivers are operated as “sliding window”. Senders maintain buffers of sent but unacknowledged packets. Receivers maintains buffer to assure non-duplicate, in order delivery to applications.
  • 发送方缓存:已发送和未确认的包 接收方缓存:不重复,按序到达的包

窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。

发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。

接收窗口只会对窗口内最后一个按序到达的字节进行确认发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。就可以移动了如果发送方窗口迟迟收不到来自接收方的确认,就会超时重传

img

拥塞控制

如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。

img img

1. 慢开始与拥塞避免

  • Slow start: 初始 cwnd = 1,每收到1个ack cwnd++,cwnd指数增长:2、4、8 …

  • 为避免过快,设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次cwnd++

  • 超时: 令 ssthresh = cwnd / 2,重新执行慢开始。

2. 快重传与快恢复

接收方只对最后一个收到的有序报文段进行确认。在发送方,如果收到三个重复确认,那么可以知道接收方下一个报文段丢失,此时执行快重传

只是丢失个别报文段,而不是网络拥塞,因此执行快恢复,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。

img

HTTP

  • Stateless
    • Every request is completely independent
    • Similar to transaction
    • programming, local storage, cookies, sessions are used to create enhanced user experience
  • HTTPS
    • data sent is encrpted
    • SSL / TLS
    • install a certificate on web host.
  • HTTP Methods
    • GET: fetch data from server
    • POST: submit data to server
    • PUT: update data already on the server
    • DELETE: deletes data from server
  • Headers
    • General: Request URL, Method, Status code, remote address, referer policy
    • Response: server, set-cookie, content-type, content-length, date
    • Request: cookies, accept-xxx, content-type, content-length, authorization, user-agent, referrer

基本方法

  • Get 获取资源
  • Post 传输数据
  • Head 获取报文头部
  • Put/Delete 上传/删除文件 不安全没有验证机制
  • Patch 部分修改资源

状态码

200 OK

3XX 重定向

4XX 客户端错误 如 404 NOT FOUND

5XX 服务端错误

长连接短连接&流水线

  • HTTP 1.1之后采用长连接persistent connection 只需要建立一次 TCP 连接就能进行多次 HTTP 通信。如果要断开连接,需要由客户端或者服务器端提出断开,使用 Connection : close;在 HTTP/1.1 之前默认是短连接的,如果需要使用长连接,则使用 Connection : Keep-Alive

  • 默认情况下,HTTP 请求是按顺序发出的,下一个请求只有在当前请求收到响应之后才会被发出。由于受到网络延迟可能需要等待很长时间。

    流水线是在同一条长连接上连续发出请求,而不用等待响应返回,这样可以减少延迟。

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2016-2020 th2zz

请我喝杯咖啡吧~

支付宝
微信