分类 网络 中的文章

tcp交互数据和块数据处理

前言 目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等。这些协议又可以根据数据吞吐量来大致分成两大类: + (1)交互数据类型 例如telnet,ssh,这种类型的协议在大多数情况下只是做小流量的数据交换,比如说按一下键盘,回显一些文字等等。 + (2)数据成块类型 例如ftp,这种类型的协议要求TCP能尽量的运载数据,把数据的吞吐量做到最大,并尽可能的提高效率。针对这两种情况,TCP给出了两种不同的策略来进行数据传输。 TCP的交互数据流 对于交互性要求比较高的应用,TCP给出两个策略来提高发送效率和减低网络负担: - (1)捎带ACK - (2)Nagle算法(一次尽量多的发数据) 捎带ACK的发送方式     当主机收到远程主机的TCP数据报之后,通常不马上发送ACK数据报,而是等上一个短暂的时间,如果这段时间里面主机还有发送到远程主机的TCP数据报,那么就把这个ACK数据报“捎带”着发送出去,把本来两个TCP数据报整合成一个发送。一般的,这个时间是200ms。可以明显地看到这个策略可以把TCP数据报的利用率提高很多。 Nagle算法     Nagle算法是说,当主机A给主机B发送了一个TCP数据报并进入等待主机B的ACK数据报的状态时,TCP的输出缓冲区里面只能有一个TCP数据报,并且,这个数据报不断地收集后来的数据,整合成一个大的数据报,等到B主机的ACK包一到,就把这些数据“一股脑”的发送出去。这样可以较少交互,减轻压力。 TCP的成块数据流     对于FTP这样对于数据吞吐量有较高要求的要求,将总是希望每次尽量多的发送数据到对方主机,就算是有点延迟也无所谓。TCP也提供了一整套的策略来支持这样的需求。TCP协议中有16个bit表示“窗口”的大小,这是策略的核心。 传输数据时ACK的问题     在解释滑动窗口前,需要看看ACK的应答策略,一般来说,发送端发送一个TCP数据报,那么接收端就应该发送一个ACK数据报。但是事实上却不是这样,发送端将会连续发送数据尽量填满接受方的缓冲区,而接受方对这些数据只要发送一个ACK报文来回应就可以了,这就是ACK的累积特性,这个特性大大减少了发送端和接收端的负担。 滑动窗口     滑动窗口本质上是描述接受方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据。如果发送方收到接受方的窗口大小为0的TCP数据报,那么发送方将停止发送数据,等到接受方发送窗口大小不为0的数据报的到来。关于滑动窗口协议,还有三个术语,分别是: * 窗口合拢:当窗口从左边向右边靠近的时候,这种现象发生在数据被发送和确认的时候。 * 窗口张开:当窗口的右边沿向右边移动的时候,这种现象发生在接受端处理了数据以后。 * 窗口收缩:当窗口的右边沿向左边移动的时候,这种现象不常发生。 TCP就是用这个窗口,慢慢的从数据的左边移动到右边,把处于窗口范围内的数据发送出去(但不用发送所有,只是处于窗口内的数据可以发送。)。这就是窗口的意义。 数据拥塞     上面的策略用于局域网内传输还可以,但是用在广域网中就可能会出现问题,最大的问题就是当传输时出现了瓶颈所产生的大量数据拥塞问题,为了解决这个问题,TCP发送方需要确认连接双方的线路的数据最大吞吐量是多少。这就是所谓的拥塞窗口。     拥塞窗口的原理很简单,TCP发送方首先发送一个数据报,然后等待对方的回应,得到回应后就把这个窗口的大小加倍,然后连续发送两个数据报,等到对方回应以后,再把这个窗口加倍(先是2的指数倍,到一定程度后就变成线行增长,这就是所谓的TCP慢启动),发送更多的数据报,直到出现超时错误,这样,发送端就了解到了通信双方的线路承载能力,也就确定了拥塞窗口的大小,发送方就用这个拥塞窗口的大小发送数据。 平时在下载电影的时候,仔细观察应该不难发现,速度先从几十K到100K,然后到200K,再到400K,后面慢慢变的稳定,这个速度就是拥塞窗口的大小。 技术交流可加QQ群:774332965 微信订阅号同步:时下IT……

阅读全文

tcp连接的建立与终止

TCP三次握手 TCP三次握手;简单来说就是通信的双方建立可靠的连接之前必须要做的事情,就是在通信之前要做的事情。而我们常见的双方就是指的 客户端 ---- 服务器。 建立连接过程 首先client端发送连接请求报文,server段接受连接后回复ack报文,并为这次连接分配资源。client端接收到ack报文后也向server段发生ack报文,并分配资源,这样tcp连接就建立了。 建立连接过后干嘛呢?那就是该干嘛干嘛呀,就可以传输数据了。 TCP四次挥手 TCP四次挥手:由于TCP协议的可靠性,所以它再结束通信之前也会有一个流程来确认数据已经传输完成,在网络线路当中没有残留的数据包。 断开连接过程 中断连接端可以是Client端,也可以是Server端。假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说”我Client端没有数据要发给你了”(此时的Client是处于FIN_WAIT状态),但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,”告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,”告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后,”就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,”就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了! 什么是MSL MSL是一个时间概念,指的是数据包在链路中的最大生存时间,如果超过这个时间,数据包就会被丢掉。主动发起断开连接的一方会在TIME_WAIT时等待2MSL,因为包要一个来回。所以有时候也称TIME_WAIT状态为2MSL状态。 什么时候哪一方会出现TIME_WAIT TCP四次挥手的时候主动发起FIN报文的一方会处于TIME_WAIT状态。 TIME_WAIT的好和坏 TIME_WAIT这个东西有没有好处呢?那有没有坏处呢? 答案是都有的。好处就是它保证了在断开连接之前数据传输的完整性;那坏处是什么呢?想象一下,如果是服务器主动发起的FIN报文,那它就会处于TIME_WAIT状态,那肯定就会占用一定系统资源。想象一下,如果并发量超级大的时候,那服务器岂不是会崩溃了。 技术交流可加QQ群:774332965 微信订阅号同步:时下IT……

阅读全文

使用COW让浏览器正确上网

概述 防火长城(英文名称Great Firewall of China,简写为Great Firewall,缩写GFW),也称中国防火墙或中国国家防火墙,指中华人民共和国政府在其管辖因特网内部建立的多套网络审查系统的总称,包括相关行政审查系统。 当使用浏览器访问google、facebook、youtube这些网站时都被GFW拦于门外,但是有些站点又是可以访问的,比如github.com;这就造成一个问题,我怎么知道那些网站是可以访问,哪些不能访问的站点又该怎么办呢? COW 介绍 COW 是一个简化穿墙的 HTTP 代理服务器。COW 的设计目标是自动化,理想情况下用户无需关心哪些网站无法访问,可直连网站也不会因为使用二级代理而降低访问速度。 简单来说就是国内能访问的就直接访问,不能访问的就走代理访问。 COW优点 自动检测网站是否被墙,仅对被墙网站使用二级代理 自动生成包含直连网站的PAC文件,访问这些网站时可不使用COW COW缺点 仅支持浏览器使用 架构图 客户端和一台内网服务器建立连接 内网服务器和一台香港服务器建立连接 当客户端访问国内网站时,就直接走内网服务器代理;当客户端访问国外网站时,就先走内网服务器,然后再通过内网服务器和香港服务器之间的SOCK链接访问。 服务部署步骤 香港服务器(6.6.6.6) 1、下载COW二进制文件 $ curl -L git.io/cow | bash 此时会在当前目录下生成一个 cow 二进制文件,和 .cow/ 目录。cow 为启动程序,.cow/ 里面是配置文件。 2、修改配置文件 $ vim .cow/rc listen = cow://aes-128-cfb:xxx:5555 logFile = /var/log/cow.log 只需要有这两行配置就OK了。listen行的xxx是内网服务器和相关服务器通信的密码,aes-128-cfb是加密方式。详细的可以参考cow配置文件里面的中文解释。 3、启动 ./cow & 此时会在该服务器上监听5555端口,等待内网服务器去连接。 内网服务器(192.168.1.11) 1、下载COW二进制文件 $ curl -L git.……

阅读全文

OSI七层协议详细讲解

今天我们从高到低依次来讲解。 可能有些人不是很详细的了解OSI各层所对应的协议,之前我也不是很了解,所以就把每层对应的协议也一起写在了每层的最后 应用层 主要功能:就是处理网络应用。比如文件传输、电子邮件、文件服务、虚拟终端 详细说明:直接为服务端服务,提供各类应用过程的接口和用户接口。例如HTTP、TELNET、FTP、SMTP、DNS、NFS等 对应TCP/IP协议族协议:TFTP、HTTP、SNMP、FTP、SMTP、DNS、TELNET 表示层 主要功能:数据的表示。比如数据格式化、代码转换、数据加密 详细说明:使应用层可以根据其服务解释数据的含义。通常包括数据的编码的约定、本地语法的转换。例如JPEG、ASCII、GIF、MPEG 对应TCP/IP协议族协议:注意,注意。没有协议 会话层 主要功能:互联主机的通信。解除或建立与别的节点的联系 详细说明:负者管理远程用户或进程间的通信,通常包括通信控制、检查点设置、重建终端的传输链路、名字查找和安全验证服务。例如RPC和SQL等 对应TCP/IP协议族协议:注意,注意。没有协议 传输层 主要功能:端到端连接。提供端到端的接口来发送和接收数据 详细说明:实现发送端和接收端的端到端的数据分组传送,负者保证实现数据包的无差错、无丢失、无冗余和按顺序地传输。其服务的访问点为端口。 对应TCP/IP协议族协议:TCP、UDP 网络层 主要功能:分组传输和路由选择。为数据包选择路由 详细说明:通过网络连接交换传输层实体发出的数据,解决路由选择、网络拥塞的问题。服务访问的点为网络地址(IP地址) 对应TCP/IP协议族协议:IP、ICMP、IGMP、OSPF 数据链路层 主要功能:传输以帧为单位的信息。传输有地址的帧以及错误检测功能 详细说明:建立、维护和释放网络实体之间的数据链路,把流量控制和差错控制合并在一起,实现帧同步。服务访问点为MAC地址。 对应TCP/IP协议族协议:PPP、MTU、SLIP、CSLIP、ARP、RARP(这里的ARP和RARP协议有争论,有人说ARP、RAP是网络层的协议,又有人说是这层的协议。其实ARP和RARP应该是属于网络层,但是它的工作内容确实这层的,所以我这里就把它归在这层了) 物理层 主要功能:二进制位传输。以二进制数据形式在物理媒体上传输数据,就是二进制流 详细说明:通过一系列协议定义了通信设备的机械、电器、功能及规程特征 对应TCP/IP协议族协议:IEEE802 好,到这儿应该对OSI各层的作用和所使用的的协议有大概的了解了吧! 技术交流可加QQ群:774332965 微信订阅号同步:时下IT……

阅读全文

OSI/ISO七层——TCP/IP四层

OSI:一个国际组织 ISO:OSI提出的网络的7层架构 TCP:传输控制协议IP:数据报协议 TCP/IP:TCP/IP为很大的一个协议族,里面包含了非常多的协议。如:TCP、IP、UDP、ARP、ICMP、RARP、IGMP…… 他们的对应关系如下图所示: 技术交流可加QQ群:774332965 微信订阅号同步:时下IT……

阅读全文

IP协议

前言 TCP/IP协议是一个很大协议族,里面包含了IP协议、TCP协议、UDP协议、ICMP协议、IGMP……等等的协议;而IP、TCP就是其中很重要两个的协议。今天我们就来一起简单的分析一下IP协议。 IP协议简介 IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制;而它的上层协议TCP就具有这个功能。 什么是上层协议?就是距离用户更近的协议,比如http、ftp、TCP等等,而这些协议都是基于IP协议的,所以说是IP协议的上层协议。 IP协议报格式 今天先不挨个解释,我们先来看一看其中有趣的两项。 *8位生存时间TTL*:TTL是一个控制IP数据报在传输过程中的有效时间的类型,详细的可以参考LaoXianYu的TTL,接下来我们来详细的说它后面的那8位。 *8位协议*:开头说了,IP协议是一个不可靠的协议,它还有可靠的上层协议;那上层协议用的是什么协议呢?究竟是TCP还是UDP,答案就在这 8位协议 上。这儿的8位就指出了IP协议的上层用的什么协议。 Linux系统的朋友可以查看 /etc/protocols 这个文件。 (注意:这个图没有截完,下面还有很多,一直到了142了吧) 该文件是网络协议定义文件,里面记录了TCP/IP协议族的所有协议类型。文件中的每一行对应一个协议类型,它有3个字段,中间用TAB或空格分隔,分别表示“协议名称”、“协议号”和“协议别名”。 也就是说,如果这儿8位协议的值为 1,那上层就是用的ICMP;如果为 2,那上层用的就是IGMP;如果为 6,那上层用的就是TCP。 现在大家应该知道这两项是干嘛的了吧! IP路由选择 当一个IP数据包准备好了的时候,IP数据包(或者说是路由器)是如何将数据包送到目的地的呢?它是怎么选择一个合适的路径来”送货”的呢? 最特殊的情况是目的主机和主机直连,那么主机根本不用寻找路由,直接把数据传递过去就可以了。至于是怎么直接传递的,这就要靠ARP协议了。详细请查考LaoXianYu的arp 稍微一般一点的情况是,主机通过若干个路由器(router)和目的主机连接。那么路由器就要通过ip包的信息来为ip包寻找到一个合适的目标来进行传递,比如合适的主机,或者合适的路由。路由器或者主机将会用如下的方式来处理某一个IP数据包 如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。 1、搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机 2、搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要“子网掩码(1.3.)”的协助。如果找到路由器,则将该包发向路由器。 3、搜索路由表,如果匹配同子网路由器失败,则匹配同网号(第一章有讲解)路由器,如果找到路由器,则将该包发向路由器。 4、搜索陆游表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包 5、如果都失败了,就丢掉这个包。 这再一次证明了,ip包是不可靠的。因为它不保证送达。 技术交流可加QQ群:774332965 微信订阅号同步:时下IT……

阅读全文

ICMP

什么是ICMP? ICMP是(Internet Control Message Protocol)Internet控制报文协议。 ICMP协议有什么用? 它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用、端口是否可达等网络本身的消息。 这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。也就是说每次在传输IP数据包之前,都会利用ICMP去检测一番,然后再决定是否传输IP数据包。 ICMP协议类型 其中有 0:回显应答 8:回显请求 Ping命令就是利用这两种类型的ICMP数据包。 一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的traceroute通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。 (在上一篇中说道Tracroute利用了TTL,同时traceroute也利用了ICMP) 技术交流可加QQ群:774332965 微信订阅号同步:时下IT……

阅读全文

TTL

什么是TTL? 就是用来记录IP数据包从发出经过了多少路由! TTL占8bit,所以它的最大值就是255;每当数据包经过一个路由器时,TTL的值就会减1,当为0时,就把这个数据包给丢弃。较老的系统的TTL初始化值为15或32,现在一般的为255。 为什么需要TTL? 为了防止IP数据包在选路时无休止的在网络中流动。 Traceroute成功利用了TTL *Traceroute*:路由探测工具,用它可以知道从源地址到目的地址需要经过哪些路由器 *使用方法*:Traceroute 域名 / IP,你使用的时候可能会看到很多的 ‘*‘,这是正常的,因为国内的网络环境有很多都是隐蔽的。 *原理*: 我们现在可以猜想一下Traceroute程序的操作过程。它发送一份TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将TTL值减1,丢弃该数据报,并发回一份超时ICMP报文。这样就得到了该路径中的第一个路由器的地址。然后Traceroute程序发送一份TTL值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到TTL值为1的IP数据报,也不会丢弃该数据报并产生一份超时ICMP报文,这是因为数据报已经到达其最终目的地。 *那么我们该如何判断是否已经到达目的主机了呢*? Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。 看到这儿,是不是觉得Traceroute有点老奸巨猾呢?没错,就是的! 技术交流可加QQ群:774332965 微信订阅号同步:时下IT……

阅读全文

arp协议

什么是ARP协议? 协议都是电脑之间先约定好的一些规则而已! ARP协议是干嘛的? 将IP地址转换为MAC地址! 为什么需要ARP协议? 首先,我们的清楚,电脑之间进行的通信是依靠MAC地址来通信的。就说你必须知道对方主机的MAC地址(MAC地址才是唯一的),然后你才能给它发送信息,然后它的网卡收到信息过后才能进行处理。但是我们一般都不记MAC地址,退而求其次,我们记得是IP地址;再退一步我们就是记得 域名 了,比如说 www.google.com。 域名---->IP地址---->MAC地址,域名到IP地址我们是通过DNS来完成的(不明白DNS的可以参考 xianyuLuo的这篇文章。而从IP地址到MAC地址,我们用的就是arp。 ARP协议的工作过程 当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机,而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。 arp缓存表例子 windows下执行”arp -a”命令: linux下执行”arp -a”命令: 技术交流可加QQ群:774332965 微信订阅号同步:时下IT……

阅读全文

DNS解析

什么是DNS解析? 就是把域名转换为IP地址的一个过程 为什么需要DNS解析? 以前都是靠 /etc/hosts 文件来解析域名的,每解析一个域名就需要在文件里面添加一条对应记录。后来由于互联网的迅速发展,域名已经数不胜数了。如果这个时候还是一条一条记录的写在/etc/hosts 文件里面的话,那这个文件估计就超级大了。于是就有了DNS解析,由DNS服务器来解析域名。 DNS域名解析过程有两种方法:递归解析、迭代解析 递归解析: 递归解析就相当于你把这件事情交给第三个人去做,不管他怎么做,反正最后把域名对应的IP地址交给你就是了。而这第三个人就是DNS服务器,这也是我们生活中用的比较多的一种方法。一般用的就是电信的 114.114.114.114 迭代解析: 迭代解析就是你自己去找。 全球的根域名服务器一共有13台,你自己去一级一级的找下去,最终找到自己想解析的域名。 例子: 解析 www.google.com.(正规来说这后面是还有一个点的,只是一般都省略了)这个域名;我的DNS服务器是电信的114.114.114.114 解析步骤: 1、我自己的电脑去访问www.google.com的时候,就问114 “你帮我找找www.google.com服务器的IP地址” 2、然后114就去找到13台根服务器中的一台根服务器,问“你知道www.google.com的IP地址嘛?”,然后根服务器就说:“不知道,但是我知道.com的服务器IP,要不你去问问它?” 3、接着114就找到.com的服务器问:“你知道www.google.com的IP嘛?”,然后.com服务器就说:“我不知道,但是我知道google.com的服务器IP,要不你去问问它?” 4、再接着114就找到google.com的服务器问:“你知道www.google.com的IP嘛?”,然后google.com服务器就回答道“知道呀”,然后把IP地址告诉114 5、历经千辛万苦终于找到了,114就会暂时把这个地址缓存一段时间,当有人再来问它的时候,它就不用那么辛苦去找了,直接从缓存里面调出来就是了 6、最后114就把www.google.com的IP地址告诉我了,然后我就去向那个IP地址请求资源去了 总结: 我去问114,让它给我www.google.com的服务器地址,这样的方法就叫做递归,或者也可以叫做转发吧! 114去找根服务器,一台台挨着问的这个过程就叫做迭代! 技术交流可加QQ群:774332965 微信订阅号同步:时下IT……

阅读全文