技术综合

14-TCP 协议(连接异常与RST)

1.RST段当TCP连接出现严重的错误时,必须释放连接。通过将TCP首部中的RST标志位置1,就可以通知对端发生错误,以终止连接。我们在TCP协议(连接异常)一文中已经看到过这种错误,当时实验演示的是向一个不存在的端口建立连接,导致对端发送...

21-TCP 协议(滑动窗口——抓包分析)

在上一文中我们已经介绍了滑动窗口的基本概念,以及它的目的。本文我们就亲自动手实践一下。1.环境准备git地址:https://git.oschina.net/ivan_allen/unp.git服务器:unp/protocol/tools/...

20-TCP 协议(滑动窗口——基础)

相信大家都遇到过这样的场景:同学Luffy给你打电话,让你记下一串手机号码,可是你记忆力不太好,你跟Luffy约定,一次只最多只能报4个数字,Luffy念一遍,如果你听到了就把他说的话重复一遍。接下来:你:你一次最多报4个数字,多了我记不住...

19- TCP 协议(Nagle)

前面我们所用的unp/protocol/tools/winclient/echo_cli.cpp程序的特别之处是它总会发送一个小分组(TCP段,只有41字节)到服务器。这样的小分组在英文中称为tinygram,在网络状态好的情况下,比如局域...

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

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

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

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

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

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

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

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

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

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

16-TCP 协议(同时关闭)

有同学会问,为什么不写同时打开?(同时打开指的是两端都是服务器,两端同时向对方建立连接请求)。一方面,在我们实际生活中几乎遇不到;另一方面,很多操作系统实际都不能正确的支持同时打开,所以,这里就不写了,如果你对这个很感兴趣,请参考《TCP/...

22-TCP 协议(PSH 标志)

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

24-TCP 协议(拥塞控制)

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