# 此页面贡献者:年轻的小铲
计算机网络
计算机网络,简单的说,就是连接两台或多台计算机进行通信的系统。计算机最初只是单机状态,随发展实现了通信。进行通信时,需要相应的协议。举例:男女盖佬,如果会说同一种语言(协议),他们就能够沟通(通信)。互联网就是互联全世界的计算机网络。互联网的协议族就是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决定)为单位发送数据,如图,我们每发一个段进行一次应答处理:这种传输方式 => 包的往返时间越长,通信性能越低。
此时,我们可以利用窗口控制提高速度。没错的,并行处理的。如图:
这个机制使用了大量的缓冲区,此时确认应答以更大的单位进行 => 对多个段同时进行确认应答。更大的单位这里就是指窗口。窗口大小 => 无需等待确认应答,可以继续发送数据的最大值。窗口大小是由接收端的主机决定的。TCP 首部专门有个字段用来通知窗口大小。接收端将自己可以接受的缓冲区大小,放入这个字段,通知给发送端。发送端根据接收端主机的窗口大小通知,进行流量控制。防止发送端一次发送过大数据导致接收端无法处理。
看上图,大概就是长这样的东西,长条黑黑的就是要发的数据,一小格一小格就是段,还有白白那一块是窗口。窗口外的左边,是已经收到确认应答的数据段,窗口外的右边,就是窗口外边的呗。窗口里面的,是发了还没收到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.