搜索结果

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

36-多进程并发服务器(僵尸进程与信号处理)

在上一篇文章中,最后遗留了一个僵尸进程的问题。一旦客户端关闭连接,服务器子进程就会退出,然而父进程仍然存在,就产生了“白发人送黑发人”的场景。如果父进程没有主动回收(wait)子进程,或者没有忽略SIGCHLD信号,退出的子进程就会成为僵尸...

35-并发服务器(多进程)

待你进一步完善了前面的echo服务器后,也处理了对端发送而来的RST段而导致的错误。现在,我们遇到了一个新问题,即客户端在关闭退出后,服务器也关闭退出了。1.让服务器永远运行解决的办法很简单,我们将server改进为下面这样:voidser...

38-连接断开异常(服务器进程终止)

代码托管在gitos上,请使用下面的命令获取:gitclonehttps://git.oschina.net/ivan_allen/unp.git如果你已经clone过这个代码了,请使用gitpull更新一下。本次实验所使用的程序路径仍然是...

37-多进程并发服务器(并发测试)

因为我们没有大量的测试机器,所以只能在单机上模拟大量客户端去连接服务器。代码托管在gitos上,请使用下面的命令获取:gitclonehttps://git.oschina.net/ivan_allen/unp.git如果你已经clone过...

40-连接异常(服务器崩溃)

说服务器崩溃,言外之意就是说服务器挂了,但是没有发送FIN报文给客户端。不管是崩溃也好,服务器断网也好,还是中间路由器故障,只要客户机发送数据给对方,数据达到不了对方,或对方数据传送不过来,客户端和服务器都互相不能感知到对方是否出现异常。所...

39-连接断开异常(引发 SIGPIPE)

代码托管在gitos上,请使用下面的命令获取:gitclonehttps://git.oschina.net/ivan_allen/unp.git如果你已经clone过这个代码了,请使用gitpull更新一下。本次实验是接着上一篇文章的实验...