搜索结果

26-TCP 协议(慢启动与拥塞避免)

观察到上一个实验中的慢启动的现象后,接下来我们就详细讲讲到底是怎么一回事。1.慢启动算法对于发送方来说,TCP维护了一个变量cwnd(congestionwindow),这个变量称为拥塞窗口,它的大小就是cwnd。它表示发送方一次想要发送多...

25-TCP 协议(慢启动——观察)

在上一节,我们已经介绍了网络拥塞以及常用的拥塞控制算法,另外,我们还简单的讲述了如何试探性的去探测网络有没有拥塞。实际上,慢启动算法也是这样做的,只是比这个稍稍复杂一点。在讲慢启动算法之前,我们先做一个实验,观察一下。1.实验环境服务器un...

24-TCP 协议(拥塞控制)

1.概述在学习拥塞控制前,我们假设:接收方总是有足够大的缓存空间,接收方的接收窗口大小总是很大——这意味着接收方对数据来者不拒。在基于这样的理想条件上,如果发送方发送的数据接收方没有收到,那么大抵上可以判断为网络出现了拥塞。2.网络拥塞是怎...

22-TCP 协议(PSH 标志)

1.PSH标志位从你第一次抓包以来,PSH标志位几乎与你形影不离。它的英文单词是PUSH,表示“推”的意思。1.1接收缓冲区和发送缓冲区在谈PSH标志位前,先来说说TCP双方是如何发送数据的。假设有发送方A和接收方B。发送方有一个发送缓冲区...

31-TCP 协议(保活定时器)

1.KeepAliveTCP保活定时器,KeepAlive,特别强调一下,不是HTTP协议里的那个KeepAlive.在HTTP中,keepalive是在应用层实现的,目的在于延长连接时间,即应用层服务器如果在一定时间内(通过keepali...

30-TCP 协议(糊涂窗口综合症)

1.糊涂窗口综合症糊涂窗口综合症,这个名字很有意思,原文叫SillyWindowSyndrome,简称SWS.一看到窗口,我们就应该反应过来这是流量控制中的东西。SWS是这样一种情况:接收方通告了一个1字节的窗口给发送方,然后发送方发送了1...

29-TCP 协议(持续定时器)

1.持续定时器在我们学习滑动窗口协议的时,遇到过窗口大小为0的情况。接收方通告一个0窗口给接收方,可以用来阻止发送方继续发送数据。如果在某个时候,接收方缓冲区有空间了,于是发送了一个非0窗口的通告给接收方,不幸的是这个通告丢失了,而发送方却...

28-TCP 协议(超时与重传)

TCP超时与重传应该是TCP最复杂的部分之一了。Windows和Linux对这部分的实现还有所不同,但是算法基本上还是差不多的。超时重传是TCP保证可靠传输的基础。当TCP在发送数据时,数据和ack都有可能会丢失,因此,TCP通过在发送时设...

27-TCP 协议(快重传与快恢复)

很遗憾的是,这里一节我没办法用实验演示给你看,但是我尽量用文字和图叙述清楚。慢启动和拥塞避免算法是在1988年提出的,而快重传和快恢复是1990年提出的。既然这两个新算法是时隔两年后才提出的,那么它一定是对慢启动和拥塞避免算法的不足之处进行...

23-TCP 协议(紧急标志)

1.紧急标志当你再次看到图1时,相信你已经无比的亲切,再观察下面彩色的6个标志位,有5个你已经熟知了,还剩下最后一个URG,对,就是图1中那个鲜红的,醒目的那个位置。图1TCP首部除此之外,还有一个字段——16位紧急指针,它正是配合URG标...

34-异常处理(accept 返回前连接中止)

网络编程的难度在于异常状况的处理。在前面学习TCP协议的时候,我们就分析过各种连接异常,断开异常等等,大家要把各种情况烂记于心。本文我们探讨一种比较特殊的情况,即客户端连接建立成功后(进入ESTABLISHED状态),立即关闭连接退出。而此...

33-基于 TCP 的回射服务器

有些同学可能没有完成上一节留下的任务。所以,还是有必要在浏览一下整个程序的结构,不然大家可能看看文章也就过去了。如果你还没有gitclone,赶紧的把下面命令输入到你的机器中执行。gitclonehttps://git.oschina.ne...