TCP/IP学习(2)


运输层(TCP):
主要为两台主机上的应用程序提供端到端的通信服务
TCP:提供一种面向连接的、可靠的字节流服务
TCP首部最小长度20字节,最大长度60字节。
TCP连接的建立:
三次握手
SYN报文需要确认,占用一个字节序号。
ACK保温不需确认,不占用字节序号。
TCP连接的终止:
四次握手
TCP连接是全双工的,因此每个方向必须单独地进行关闭。
发送FIN通常是由应用层进行关闭的结果;而对FIN的确认ACK则是由TCP自动完成的。
TCP的交互数据流:
Rlogin:每次发送一个字节到服务器。
经受时延的确认:
通常TCP在接收到数据时并不立即发送确认ACK;相反,它推迟发送确认ACK,以便将ACK与需要沿该方向发送的数据一起发送(数据捎带ACK)
绝大多数实现采用的时延为200ms,也就是说,TCP将以最大200ms的时延等待是否有数据一起发送
Nagle算法:
算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。
相反,TCP收集这些少量的分组,并在确认到来时以一个分组的方式发送出去。


Socket API用户可以使用TCP_NODELAY选项来关闭Nagle算法
Host Requirements RFC声明TCP必须实现Nagle算法,但是必须为应用提供一种方法来关闭该算法在某个连接上的执行。
TCP的成块数据流:
对以太网而言,默认的4096字节的发送和接收缓存不是最理想的大小,将两个缓存增加到16384个字节可以增加约40%左右的吞吐量。
PUSH标志:
发送方使用PUSH标志通知接收方将所收到的数据全部提交给接收进程。
这里的数据包括与PUSH一起传送的数据以及接收方TCP已经为接收进程收到的其他数据。
通过允许客户应用程序通知其TCP设置PUSH标志,客户进程通知TCP在向服务器发送一个报文段时不要因等待额外数据而使已提交数据在缓存中滞留。
拥塞窗口:
通告窗口是接收方使用的流量控制,而拥塞窗口是发送方使用的流量控制。
拥塞窗口采用慢启动算法。
定时器:
对每个连接,TCP管理4个不同的定时器。
重传定时器:
当希望收到另一端的确认,在确认到达之前等待的时间,超过该时间则进行重传。
定时器不是一个固定的时间间隔,采用指数退避算法增加。
坚持定时器:
由于TCP并不对ACK进行ACK,为了防止窗口更新的ACK丢失,发送方使用一个坚持定时器来周期性的向接收方查询接收窗口是否已经更新。
TCP从不放弃发送窗口探查。这些探查每个60秒发送一次,持续到或者窗口被打开,或者应用进程终止连接
保活定时器:
保活不是TCP规范的一部分。
一般在服务器端设置保活(keepalive)定时器。如果一个给定的连接在2个小时内没有任何动作,则服务器(设置保活选项的一端)就向客户发送一个探查报文段。
客户主机可以:
(1)客户主机正常,正常响应
(2)崩溃并且关闭或者正在重启,无响应timeout
(3)崩溃并且已经重启完毕,响应reset复位报文
(4)客户主机正常,但是链路不通,No route to host
保活间隔时间2个小时,可以设置,但是这个是系统级的变量,会影响到所有使用该功能的变量
2MSL定时器:
测量一个连接处于TIME_WAIT状态的时间




运输层(UDP):
不保证可靠性,任何必需的可靠性必须由应用层来提供








应用层:处理特定的应用程序细节。

你可能感兴趣的:(系统,网络)