Linux网络编程读书笔记(3)

本文详细介绍了TCP/IP协议,包括OSI参考模型各层功能,对比了TCP和UDP的特点。阐述了传输层端口概念、分配方式,以及域名系统和名字服务器。重点讲解了TCP的确认、超时重传、滑动窗口协议和“慢启动”策略,还介绍了TCP的状态转移过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三章  TCP/IP协议

·3.1 OSI参考模型、协议和服务

物理层实现在通信信道的01比特传输;

数据链路层加强了比特传输功能,将01比特组织成数据帧实现可靠传输;

网络层主要实现路由选择,确定端到端的传输路径;

传输层实现点对点的无差错数据传输;

会话层主要实现用户会话关系和同步的管理;

表示层消除信息的语法和语义的差别;

应用层面向不同需求,实现不同功能。

 

·3.2 TCPUDP的比较

TCP实现了面向连接的、端对端的可靠流传输。TCP为其可靠性做的最重要的工作有:确认和超时重发、以及流量控制等。适合在传输数据可靠性较高的应用。

UDP建立在IP协议上,利用IP包提供一种无连接的高效服务。但它不考虑数据包的正确和可靠性,需要应用程序自己来处理。适合在实时、数据量较小或网络通信可靠时的应用。

 

·3.3 传输层端口

       传输层和网络层最重要的区别是提供了“进程到进程的”通信能力,而网络层只能将IP包寻找到主机。实现进程间通信,除了主机地址还需要进程标志。

       TCP, UDP提出了协议端口的概念,此端口是软件端口不同于硬件端口。TCP/IP实现中对端口操作被设计成如同一般文件的操作。TCPUDP的端口是完全独立的,即使在同一个进程里使用如9999/TCP9999/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发送请求,对端BTCP回应:

(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>

AB发送自己的同步SYN信息给对方后,在SYN中包括本端初始的数据序列号,并且需要接收对方对自身发从的SYNACK确认。这个过程称为“三次握手”,共发送了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数据包发送到制定地点。

 

      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值