第三章 TCP/IP协议
·3.1 OSI参考模型、协议和服务
物理层实现在通信信道的0、1比特传输;
数据链路层加强了比特传输功能,将01比特组织成数据帧实现可靠传输;
网络层主要实现路由选择,确定端到端的传输路径;
传输层实现点对点的无差错数据传输;
会话层主要实现用户会话关系和同步的管理;
表示层消除信息的语法和语义的差别;
应用层面向不同需求,实现不同功能。
·3.2 TCP和UDP的比较
TCP实现了面向连接的、端对端的可靠流传输。TCP为其可靠性做的最重要的工作有:确认和超时重发、以及流量控制等。适合在传输数据可靠性较高的应用。
UDP建立在IP协议上,利用IP包提供一种无连接的高效服务。但它不考虑数据包的正确和可靠性,需要应用程序自己来处理。适合在实时、数据量较小或网络通信可靠时的应用。
·3.3 传输层端口
传输层和网络层最重要的区别是提供了“进程到进程的”通信能力,而网络层只能将IP包寻找到主机。实现进程间通信,除了主机地址还需要进程标志。
TCP, UDP提出了协议端口的概念,此端口是软件端口不同于硬件端口。TCP/IP实现中对端口操作被设计成如同一般文件的操作。TCP和UDP的端口是完全独立的,即使在同一个进程里使用如9999/TCP和9999/UDP的端口号,它们是不会起冲突的。
端口分配有两种:1 全局分配,即集中控制方式,由权威机构根据需要统一分配;2 本地分配,进程需要传输服务时向系统动态申请,操作系统根据当前系统端口使用情况返回本地唯一的端口号。由于端口的唯一性,也可以来标示一个进程。
TCP/IP把端口分为两部分:1 少量的保留端口 2 自由端口,由进程进行通信前申请。
·3.4 域名系统和名字服务器
域名解析就是实现IP地址和主机名字间一一对应关系。正向解析是从域名映射到IP地址,反向解析是从IP地址得到域名。在TCP/IP中,名字和地址间转换是由一组相互独立和协作的服务器软件来完成,即名字服务器。
·3.5 TCP协议
1. TCP的确认机制
TCP传输数据是以字节流方式,流中的数据是一个字节构成的序列,序列结构由应用程序解释,TCP的基本传输单元是TCP数据段。当接收端收到数据后,如果数据正确TCP将发送确认信息给发送端,确认值是下一个字节的序列ACK。表明发送端的ACK之前的序列都已被正确接收。
2. TCP的超时重传机制
TCP在发送一个数据包后,数据信息还保留在缓冲区中,直到接收端发送确认信息后才删除它们。如果一段时间后没有收到接收端确认,那么发送端将重发该数据包然后等待再次确认。如果超时重发到达一定次数,那么发送方认为对端不可到达,断开TCP连接。
TCP采用一种自适应的确定定时时长算法。定义RTT(round trip time)为发出数据包到数据包确认之间的时间长度。TCP检查每一连接的性能,根据变化重新计算RTT值:
Timeout = β× RTT
RTT = α×old_RTT + (1-α) × new_RTT_Sample
其中α决定RTT对时延变化反映的速度,如果α接近1,则时间变化不影响RTT值,如果接近0那么RTT将随时延快速变化。
TCP数据段数据结构,略;
3. TCP的滑动窗口协议
TCP通过滑动窗口协议实现拥挤控制,即发送方最多只能发送控制窗口大小的数据,当有接收方发送来的数据确认,发送才继续进行。控制窗口的大小由两个因素决定:一个是发送方自身的拥塞窗口控制;而是控制窗口大小是发送和接收两方中的最小值。
4. TCP的“慢启动”策略
当TCP发现丢失数据则认为网络拥挤,拥塞窗口大小就减半。当TCP认为拥塞结束,就使用“慢启动”策略:每收到一个数据包拥塞窗口加1,直到窗口数达到上次发生拥塞时窗口一半时候,这是只有发送出去的所有数据包都得到回应,拥挤窗口才加1。
5. 小结
TCP通过确认和超时重传机制保证数据包的可靠性;利用滑动窗口协议和“慢启动”策略进行流量控制。UDP协议没有上述功能,所以实时性好,但可靠性差。
·3.6 TCP的状态转移过程
一个TCP连接在它的生命周期中,将经历一系列状态:LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, CLOSED。
TCP连接建立过程,由A端的TCP发送请求,对端B的TCP回应:
(1) A --> B SYN my sequence number is X <SEQ=X><CTL=SYN>
(2) A <-- B ACK your sequence number is X
(3) A --> B SYN my sequence number is Y <SEQ=Y><ACK=X><CTL=SYN,ACK>
(4) A <-- B ACK your sequence number is Y <SEQ=X+1><ACK=Y+1><CTL=SYN,ACK>
A和B发送自己的同步SYN信息给对方后,在SYN中包括本端初始的数据序列号,并且需要接收对方对自身发从的SYN的ACK确认。这个过程称为“三次握手”,共发送了3个数据包传递了4个信息。
TCP连接关闭前设置了TIME-WAIT状态,TCP将在等待2MSL(Maximum Segment Lifetime)时间后进入CLOSED状态。其中MSL是数据段在网络中最大生存时间。对端TCP在发送FIN数据端进行关闭确认时候,由于IP协议不可靠传输,可能主动方发送的确认数据包还未到达对端,对端就开始进行超时重发,如果这时主动端关闭TCP连接,那么TCP协议会认为发生网络连接错误,将发送RST旧连接数据段。因此主动端关闭TCP前等待2MSL时间,将确保发送和接收端的数据包在网络中消失。由A端主动发起连接断开状态图:
TCP A TCP B
ESTABLISHED ESTABLISHED
(主动关闭)
FIN-WAIT-1 --><SEQ=X><ACK=Y><CTL=FIN,ACK> -->CLOSE-WAIT
FIN-WAIT-2 <--<SEQ=Y><ACK=X+1><CTL= ACK> <--CLOSE-WAIT
(被动关闭)
TIME-WAIT <--<SEQ=Y><ACK=X+1><CTL=FIN,ACK><--LAST-ACK
TIME-WAIT --><SEQ=X+1><ACK=Y+1><CTL=FIN,ACK>--> CLOSED
(等待2MSL)
CLOSED
IP数据包格式,略
ICMP协议产生的控制报文放在IP数据包里,通过IP数据包发送到制定地点。