包含标签 ip 的文章

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

阅读全文

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

阅读全文