您的位置:首页 > 理论基础 > 计算机网络

重温TCP-IP学习笔记 3/3

2017-09-24 20:08 218 查看
【连接】
一个TCP连接由一个 4元组唯一确定:本地IP地址、本地端口号、远端IP地址和远端端口号。

TCP可靠性保证:
应用数据被分割为TCP认为最适合发送的数据块;TCP发送一个段后,启动定时器等待接收端确认,否则重传;接收端确认时,有几分之一秒延时;TCP保持首部和数据的检验和,出错则丢弃数据包;对IP层失序的数据重新排列,对IP数据进行去重;流量控制。

首部标识:ACK:确认序号有效;PSH:将报文交给应用层;RST:重连;SYN:同步序号用于发起连接;FIN:发送任务完成。



三次握手:【建立连接3次握手】发送端SYN给终端(握手1),接收端回复SYN+1(握手2),发送端ACK通知接收端开始传送数据(握手3);【终止连接4次握手】数据传送完毕时,发送端FIN给接收端(握手1),接收端ACK(握手2)给发送端并发FIN+1给发送端(握手3),发送端ACK给接收端(握手4)结束连接。

TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。这就是所谓的半关闭。



TCP状态变迁



RST用于‘复位’。任何时候报文段发送过程中的连接出现错误,TCP都会发一个复位报文段。
不存在端口的请求:产生ICMP,TCP使用复位。
连接的异常终止:发送复位报文(而不是FIN)来中途释放连接。
同时打开:仅建立一条TCP连接。



同时关闭过程



【通信】
使用TCP传输的两类数据:块数据和交互数据。
交互数据:每次交互产生数据分组,延迟确认(通常TCP在接收到数据时并不立即发送ACK,将以不大于TCP定时器的延时等待是否有数据一起发送,有时也称这种现象为数据捎带ACK,延迟约200ms),在广域网中使用Nagle算法:算法本身是自适应的,确认到达越快,数据也就发送的越快。

TCP传输块数据时,发送方与接收方不是每个PSH都会有一个ACK的,有时是块的发送方和慢的接收方,有时相反。下图为快发送方慢接收方的例子。



发送方使用滑动窗口来控制流量。当窗口右移,表示接收方产生了更多的数据确认(此时发送报文,并移动窗口)。





窗口大小因操作系统而异。

PUSH:发送方使用该标志通知接收方将所收到的数据全部提交给接收进程。

慢启动:通过拥塞窗口(congestion window,cwnd)来统计ACK的数量。可发送的最大报文数由拥塞窗口中的ACK数量来确定。慢启动的例子:



拥塞避免:通常和慢启动一起使用,多了一个变量:慢启动上限ssthresh。(发送方拥塞窗口与接收方通告窗口的最小值),当出现重复确认,拥塞窗口减半;出现超时,拥塞窗口置为1。
cwnd<=ssthresh时,正在进行慢启动;否则正在进行拥塞避免。慢启动需要进行到拥塞发生时刻所处位置的一半,才执行拥塞避免。拥塞避免算法要求每次收到一个确认,将cwnd增加1/cwnd(而不是慢启动的指数增长)。

【超时重传】
TCP会测量给定连接的往返时间(随路由器和网络流量有变动),并相应的调整超时时间。每个报文段会产生一个定时器来计算往返时间。

快速重传算法:对收到的重复ACK进行计数,当收到第3个时,就假定一个报文段已经丢失并重传自那个序号起的一个报文段。而此时执行拥塞避免算法,这就是快速恢复算法。
具体过程:当收到第3个ACK,慢启动上限为拥塞窗口一半,即ssthresh=cwnd/2,重传报文,cwnd=ssthresh+3倍报文大小。每次收到重复ACK,cwnd+报文段大小并发送1个分组。收到确认新数据的ACK,cwnd=ssthresh。

重组:TCP重传时,不一定要重传同样的报文段。TCP允许进行重新分组发送一个较大的报文段来提高性能。

【坚持定时器】
在连接的一方需要发送数据但对方已通告窗口大小为 0时,就需要设置TCP的坚持定时器。探测的间隔为指数增长,坚持定时器一直持续到窗口打开或者应用程序关闭。

【保活定时器】
释放掉只连接不传数据的连接。

【SNMP,UDP端口161,162】
管理进程与代理进程(被管设备)的通信协议。两种情况:管理进程向代理进程发送请求;代理进程向管理进程报告有网络事件发生。

【FTP,TCP端口21】
它在客户进程和服务器进程之间使用两个TCP连接—一个控制连接,它一直持续到客户进程与服务器进程之间的会话完成为止(传输命令);另一个按需可以随时创建和撤消的数据连接(传输数据)。



【SMTP,TCP端口25】
发送方与接收方都有一个用户代理和两个或多个报文发送代理。邮件:信封(MAIL FROM,RCPT TO),首部(received by, message-Id, From, Data, Reply to, X-Phone, X-Mailer, To, subject),正文。
发邮件的五个SMTP命令。HELO:标识主机;MAIL:标识发送方;RCTP:标识接收方;DATA:发送邮件数据;QUIT:发送结束。

【RPC】
客户端调用远程服务器的过程,由RPC程序生成函数-stub(桩)并发送到服务器;服务器端RPC程序提取调用参数与函数名,找到并调用服务器上的过程;服务器函数返回,RPC程序生成stub,将返回值生成报文发送到客户端的stub;客户端从对应的stub取出返回值,返回调用的客户端程序。
好处:封装了网络通信过程的复杂度,以及超时重传处理也又RPC框架完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: