# 此页面贡献者:年轻的小铲

计算机网络

计算机网络,简单的说,就是连接两台或多台计算机进行通信的系统。计算机最初只是单机状态,随发展实现了通信。进行通信时,需要相应的协议。举例:男女盖佬,如果会说同一种语言(协议),他们就能够沟通(通信)。互联网就是互联全世界的计算机网络。互联网的协议族就是TCP/IP。

先建立一个TCP/IP的伪印象:TCP/IP协议 !== TCP协议/IP协议。IP/ICMP; TCP/UDP; TELNET/FTP; HTTP等,都属于TCP/IP协议。所以TCP/IP是泛指这些协议。TCP/IP分层模型如下,常被视为是简化的七层OSI模型:

    -----------------------
  7|   应用层   |           |

  6|   表示层   |  应 用 层  |

  5|   会话层   |           |
    -----------------------
  4|   传输层   |  传 输 层  |
    -----------------------
  3|   网络层   |  网 络 层  |
    -----------------------
  2|  数据链路层 
               |  链 路 层  |
  1|   物理层
    -----------------------
       [OSI]     [TCP/IP]

每个分层都会对需要发送的数据加上一个首部,形成数据包。那么两台计算机通信,可以视作这样一个过程:

  *[ 数据    首部 ]
    --------====

              主机A                                        主机B
   ============================                ============================
     Application Layer: -=                           -= :Application Layer
                        ↓                             ↑
       Transport Layer: --=                         --= :Transport Layer
                        ↓                             ↑
         Network Layer: ---=                       ---= :Network Layer
                        ↓           _______           ↑
            Link Layer: ----=      |_______|      ----= :Link Layer
                        ↓__________↑       ↓__________↑

    
     *[首部[]:包含该层必要的信息,比如发送的目标地址及协议相关信息。]
     *[数据^^:在下一层的角度上看,从上一层接收到的数据包,是本层的数据。]

   数 据 + [ TCP包首部 ]
   ^^^^^  
   数 据 +   TCP包首部   + [ IP包首部 ]
   ^^^^^^^^^^^^^^^^^^^^
   数 据 +   TCP包首部   +   IP包首部   + [ 以太网包首部 ]
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

TCP协议

首先,在协议栈中, 传输层 位于 网络层 之上。传输层协议为不同主机上运行的进程提供逻辑通信;网络层协议为不同主机提供逻辑通信。不同主机上运行的进程是指什么?比如一台计算机可以同时运行多个程序:接受www服务的web牛奶器、电邮客户端、ssh客户端等。传输层协议利用端口号识别本机正在通信的应用程序,并准确地将数据传输。

TCP/IP分层模型的传输层的两个代表性协议是:TCP UDP。TCP是一种面向有连接 connection-based的传输层协议。面向有连接是指,在数据通信前,先做好通信两端之间的准备工作。这个准备工作,也就是指:建立一个TCP连接,需要发送3个包,这个过程也称作三次握手。

三次握手

# [ACK] TCP中,当发送端数据到达接收端时,接收端返回一个[已收到消息]的通知。这个消息叫做确认应答[ACK]
# [SYN] SYN是建立连接时的握手信号,TCP中发送第一个SYN包的为客户端,接收的为服务端

  假设有客户端A,服务端B。我们要建立可靠的数据传输!
      SYN(=j)       // SYN: A请求建立连接
  A ----------> B
                |
     ACK(=j+1)  |   // ACK: B确认应答A的SYN
     SYN(=k)    |   // SYN: B发送一个SYN
  A <-----------
  |
  |  ACK(=k+1)
   -----------> B   // ACK: A确认应答B的包包

滑动窗口

TCP 为了实现可靠传输,当然要知道网络实际的数据处理带宽或速度,否则 => 网络拥塞,导致丢包。TCP 引入了一些技术来做网络流量控制,其中一个是滑动窗口

TCP 以段(段的大小由MSS决定)为单位发送数据,如图,我们每发一个段进行一次应答处理:这种传输方式 => 包的往返时间越长,通信性能越低。 pic1

此时,我们可以利用窗口控制提高速度。没错的,并行处理的。如图: pic2

这个机制使用了大量的缓冲区,此时确认应答以更大的单位进行 => 对多个段同时进行确认应答。更大的单位这里就是指窗口。窗口大小 => 无需等待确认应答,可以继续发送数据的最大值。窗口大小是由接收端的主机决定的。TCP 首部专门有个字段用来通知窗口大小。接收端将自己可以接受的缓冲区大小,放入这个字段,通知给发送端。发送端根据接收端主机的窗口大小通知,进行流量控制。防止发送端一次发送过大数据导致接收端无法处理pic3

看上图,大概就是长这样的东西,长条黑黑的就是要发的数据,一小格一小格就是段,还有白白那一块是窗口。窗口外的左边,是已经收到确认应答的数据段,窗口外的右边,就是窗口外边的呗。窗口里面的,是发了还没收到ack的|还没有发出的。2001数据的ACK到达主机A后,主机A的小窗口就往前挪一格,超萌的。(窗口还有好多内容,我大概过了一遍教材了,但是自己不想打字了,你们好好看书吧,再见。

推荐书籍

1. 竹下隆史, 村山公保, 荒井透, 苅田幸雄. 图解TCP/IP(5). 人民邮电出版社, 2013.
2. Lawrence Berkeley. TCP/IP详解卷1:协议. 机械工业出版社, 2000.
3. James F. Kurose, Keith W. Ross. 计算机网络-自顶向下方法(原书第6). 机械工业出版社, 2014.
4. 谢希仁. 计算机网络(6). 电子工业出版社, 2013.
上次更新: 7/29/2018, 12:21:27 PM