TCP协议总结
Transmission Control Protocol,传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议TCP协议的目的是:在不可靠传输的IP层之上建立一套可靠传输的机制。TCP的可靠只是对于它自身来说的, 甚至是对于socket接口层, 两个系统就不是可靠的了, 因为发送出去的数据, 没有确保对方真正的读到(所以要在业务层做重传和确认机制)。可靠传输的第一要素是确认, 第二要素是重传, 第三要素是顺序。 任何一个可靠传输的系统, 都必须包含这三个要素。数据校验也是必要的。传输是一个广义的概念, 不局限于狭义的网络传输, 应该理解为通信和交互. 任何涉及到通信和交互的东西, 都可以借鉴TCP的思想。无论是在UDP上实现可靠传输或者创建自己的通信系统,无论这个系统是以API方式还是服务方式,只要是一个通信系统,就要考虑这三个要素。SeqNum的增加是和传输的字节数相关的。上图中,三次握手后,来了两个Len:1440的包,而第二个包的SeqNum就成了1441。然后第一个ACK回的是1441(下一个待接收的字节号),表示第一个1440收到了。网络上的传输是没有连接的,包括TCP也是一样的。而TCP所谓的“连接”,其实只不过是在通讯的双方维护一个“连接状态”,让它看上去好像有连接一样。所以,TCP的状态变换是非常重要的。查看各种状态的数量ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}'通过三次握手完成连接的建立三次握手的目的是交换通信双方的初始化序号,以保证应用层接收到的数据不会乱序,所以叫SYN(Synchronize Sequence Numbers)。ISN是不能hard code的,不然会出问题的。比如:如果连接建好后始终用1来做ISN,如果client发了30个segment过去,但是网络断了,于是client重连,又用了1做ISN,但是之前连接的那些包到了,于是就被当成了新连接的包,此时,client的Sequence Number可能是3,而Server端认为client端的这个号是30了。全乱了。RFC793中说,ISN会和一个假的时钟绑在一起,这个时钟会在每4微秒对ISN做加一操作,直到超过232,又从0开始。这样,一个ISN的周期大约是4.55个小时。因为,我们假设我们的TCP Segment在网络上的存活时间不会超过Maximum Segment Lifetime(MSL),所以,只要MSL的值小于4.55小时,那么,我们就不会重用到ISN。如果Server端接到了Clien发的SYN后回了SYN-ACK,之后Client掉线了,Server端没有收到Client返回的ACK,那么,这个连接就处于一个中间状态,即没成功,也没失败。于是,Server端如果在一定时间内没有收到的ACK会重发SYN-ACK。在Linux下,默认重试次数为5次,重试的间隔时间从1s开始每次都翻番,5次的重试时间间隔为1s, 2s, 4s, 8s, 16s,总共31s,第5次发出后还要等32s都知道第5次也超时了,所以,总共需要 1s + 2s + 4s+ 8s+ 16s + 32s = 26 -1 = 63s,TCP才会断开这个连接。客户端给服务器发了一个SYN后,就下线了,于是服务器需要默认等63s才会断开连接,这样,攻击者就可以把服务器的SYN连接的队列耗尽,让正常的连接请求不能处理。于是,Linux下给了一个叫tcp_syncookies的参数来应对这个事:当SYN队列满了后,TCP会通过源地址端口、目标地址端口和时间戳打造出一个特别的Sequence Number发回去(又叫cookie),此时服务器并没有保留客户端的SYN包。如果是攻击者则不会有响应,如果是正常连接,则会把这个SYN Cookie发回来,然后服务端可以通过cookie建连接(即使你不在SYN队列中)。千万别用tcp_syncookies来处理正常的大负载的连接的情况。因为sync cookies是妥协版的TCP协议,并不严谨。应该调整三个TCP参数:tcp_synack_retries减少重试次数,tcp_max_syn_backlog增大SYN连接数,tcp_abort_on_overflow处理不过来干脆就直接拒绝连接因为TCP是全双工的,因此断开连接需要4次挥手,发送方和接收方都需要发送Fin和Ack。如果两边同时断连接,那就会就进入到CLOSING状态,然后到达TIME_WAIT状态。指的是报文段的最大生存时间,如果报文段在网络中活动了MSL时间,还没有被接收,那么会被丢弃。关于MSL的大小,RFC 793协议中给出的建议是两分钟,不过实际上不同的操作系统可能有不同的设置,以Linux为例,通常是半分钟,两倍的MSL就是一分钟,也就是60秒主动关闭的一方会进入TIME_WAIT状态,并且在此状态停留两倍的MSL时长。由于TIME_WAIT的存在,大量短连接会占有大量的端口,造成无法新建连接。主动关闭的一方发出 FIN包,被动关闭的一方响应ACK包,此时,被动关闭的一方就进入了CLOSE_WAIT状态。如果一切正常,稍后被动关闭的一方也会发出FIN包,然后迁移到LAST_ACK状态。CLOSE_WAIT状态在服务器停留时间很短,如果你发现大量的 CLOSE_WAIT状态,那么就意味着被动关闭的一方没有及时发出FIN包。TCP要保证所有的数据包都可以到达,所以,必需要有重传机制。接收端给发送端的Ack确认只会确认最后一个连续的包,比如,发送端发了1,2,3,4,5一共五份数据,接收端收到了1,2,于是回ack 3,然后收到了4(注意此时3没收到),此时的TCP会怎么办?我们要知道,因为正如前面所说的,SeqNum和Ack是以字节数为单位,所以ack的时候,不能跳着确认,只能确认最大的连续收到的包,不然,发送端就以为之前的都收到了但总体来说都不好。因为都在等timeout,timeout可能会很长不以时间驱动,而以数据驱动重传如果包没有连续到达,就ack最后那个可能被丢了的包,如果发送方连续收到3次相同的ack,就重传Selective Acknowledgment, 需要在TCP头里加一个SACK的东西,ACK还是Fast Retransmit的ACK,SACK则是汇报收到的数据碎版,在发送端就可以根据回传的SACK来知道哪些数据到了,哪些没有收到重复收到数据的问题,使用了SACK来告诉发送方有哪些数据被重复接收了经典算法:Karn/Partridge算法,Jacobson/Karels算法TCP必需要知道网络实际的数据处理带宽或是数据处理速度,这样才不会引起网络拥塞,导致丢包Advertised-Window:接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来接收端LastByteRead指向了TCP缓冲区中读到的位置,NextByteExpected指向的地方是收到的连续包的最后一个位置,LastByteRcved指向的是收到的包的最后一个位置,我们可以看到中间有些数据还没有到达,所以有数据空白区。发送端的LastByteAcked指向了被接收端Ack过的位置(表示成功发送确认),LastByteSent表示发出去了,但还没有收到成功确认的Ack,LastByteWritten指向的是上层应用正在写的地方。接收端在给发送端回ACK中会汇报自己的AdvertisedWindow = MaxRcvBuffer – LastByteRcvd – 1;收到36的ack,并发出了46-51的字节如果Window变成0了,发送端就不发数据了如果发送端不发数据了,接收方一会儿Window size 可用了,怎么通知发送端呢:TCP使用了Zero Window Probe技术,缩写为ZWP,也就是说,发送端在窗口变成0后,会发ZWP的包给接收方,让接收方来ack他的Window尺寸,一般这个值会设置成3次,每次大约30-60秒。如果3次过后还是0的话,有的TCP实现就会发RST把链接断了。如果你的网络包可以塞满MTU,那么你可以用满整个带宽,如果不能,那么你就会浪费带宽。避免对小的window size做出响应,直到有足够大的window size再响应。如果这个问题是由Receiver端引起的,那么就会使用David D Clark’s 方案。在receiver端,如果收到的数据导致window size小于某个值,可以直接ack(0)回sender,这样就把window给关闭了,也阻止了sender再发数据过来,等到receiver端处理了一些数据后windows size大于等于了MSS,或者receiver buffer有一半为空,就可以把window打开让send 发送数据过来。如果这个问题是由Sender端引起的,那么就会使用著名的 Nagle’s algorithm。这个算法的思路也是延时处理,他有两个主要的条件:1)要等到 Window Size >= MSS 或是 Data Size >= MSS,2)等待时间或是超时200ms,这两个条件有一个满足,他才会发数据,否则就是在攒数据。TCP_CORK是禁止小包发送,而Nagle算法没有禁止小包发送,只是禁止了大量的小包发送TCP不是一个自私的协议,当拥塞发生的时候,要做自我牺牲拥塞控制的论文请参看 《Congestion Avoidance and Control》主要算法有:慢启动,拥塞避免,拥塞发生,快速恢复,TCP New Reno,FACK算法,TCP Vegas拥塞控制算法TCP网络协议及其思想的应用TCP 的那些事儿(上)TCP 的那些事儿(下)tcp为什么是三次握手,为什么不是两次或四次?记一次TIME_WAIT网络故障再叙TIME_WAITtcp_tw_recycle和tcp_timestamps导致connect失败问题tcp短连接TIME_WAIT问题解决方法大全(1)- 高屋建瓴tcp短连接TIME_WAIT问题解决方法大全(2)- SO_LINGERtcp短连接TIME_WAIT问题解决方法大全(3)- tcp_tw_recycletcp短连接TIME_WAIT问题解决方法大全(4)- tcp_tw_reusetcp短连接TIME_WAIT问题解决方法大全(5)- tcp_max_tw_bucketsTCP的TIME_WAIT快速回收与重用浅谈CLOSE_WAIT又见CLOSE_WAITPHP升级导致系统负载过高问题分析Coping with the TCP TIME-WAIT state on busy Linux servers

网络七层协议的总结
OSI七层模型是一个理论模型,实际应用则千变万化,因此更多把它作为分析、评判各种网络技术的依据;对大多数应用来说,只将它的协议族(即协议堆栈)与七层模型作大致的对应,看看实际用到的特定协议是属于七层中某个子层,还是包括了上下多层的功能。

两个不同的网络之间传输数据和两个不同的系统之间传输数据分别是怎么完成的?请高手指教!
TCP(传输控制协议):提供IP环境下的数据可靠传输(一台计算机发出的字节流会无差错的发往网络上的其他计算机,而且计算机A接收数据包的时候,也会向计算机B回发数据包,这也会产生部分通信量),有效流控,全双工操作(数据在两个方向上能同时传递),多路复用服务,是面向连接,端到端的传输;面向连接:正式通信前必须要与对方建立连接。事先为所发送的数据开辟出连接好的通道,然后再进行数据发送,像打电话。TCP支持的应用协议:Telnet(远程登录)、FTP(文件传输协议)、SMTP(简单邮件传输协议)。TCP用于传输数据量大,可靠性要求高的应用。 UDP(用户数据报协议,User Data Protocol)面向非连接的(正式通信前不必与对方建立连接,不管对方状态就直接发送,像短信,QQ),不能提供可靠性、流控、差错恢复功能。UDP用于一次只传送少量数据,可靠性要求低、传输经济等应用。UDP支持的应用协议:NFS(网络文件系统)、SNMP(简单网络管理系统)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。总结:TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。 UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。
两个网络之间传输数据是指用一系列的线路(光纤,双绞线等)经过电路的调整变化依据网络传输协议来进行通信的过程。网络传输需要介质,也就是网络中发送方与接收方之间的物理通路,它对网络的数据通信具有一定的影响。常用的传输介质有:双绞线、同轴电缆、光纤、无线传输媒介。网络协议即网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议。 网络协议通常被分为几个层次,通信双方只有在共同的层次间才能相互联系。网络协议即网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议。一台计算机只有在遵守网络协议的前提下,才能在网络上与其他计算机进行正常的通信。网络协议通常被分为几个层次,每层完成自己单独的功能。通信双方只有在共同的层次间才能相互联系。常见的协议有:TCP/IP协议、IPX/SPX协议、NetBEUI协议等。在局域网中用得的比较多的是IPX/SPX.。用户如果访问Internet,则必须在网络协议中添加TCP/IP协议。 简而言之,就是在遵守网络协议下,通过光纤等介质,经过调整变化来传输数据。个人理解,希望能帮上你。
其实很简单的。 都是遵循相同的协议。只要协议相同,无所谓啥系统,啥东西都可以通过网络传输。 所谓协议,就是不同的操作系统在某个领域里边,遵循的同一标准。
不知道,不过sendanywhere垮了3个平台

谁帮我总结一下计算机网络中各层的协议及协议详细内容 不胜感激
OSI模型 还是TCP/IP模型呢? 应用层Application Layer (台湾翻:应用层) 7 用户的应用程序和网络之间的接口 老板表示层Presentation Layer (台湾:展现层) 6 协商数据交换格式 相当公司中简报老板、替老板写信的助理会话层Session Layer (台湾:会谈层) 5 允许用户使用简单易记的名称建立连接 相当于公司中收寄信、写信封与拆信封的秘书传输层Transport Layer (台湾:传输层) 4 提供终端到终端的可靠连接 相当于公司中跑邮局的送信职员网络层Network Layer (台湾:网络层) 3 使用权数据路由经过大型网络 相当于邮局中的排序工人 数据链路层Data Link Layer (台湾:资料链结层) 2 决定访问网络介质的方式 相当于邮局中的装拆箱工人物理层Physical Layer (台湾:实体层) 1 将数据转换为可通过物理介质传送的电子信号 相当于邮局中的搬运工人应用层的协议 基本上应用程序里都有SMTP协议 HTTP FTP 基本开始菜单会话层 传输层无具体协议传输层 TCP UDP 传输层协议提供计算机之间的通信会话,并确保数据在计算机之间可靠地传输网络层协议提供所谓的链路服务,这些协议可以处理寻址和路由信息、错误检测和重传请求。 网络层协议包括: IP ARP协议 ICMP协议(ping命令靠这个协议完成)数据链路层 数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。 在这一层,数据的单位称为帧(frame)。 数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等物理层 物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。 在这一层,数据的单位称为比特(bit)。 属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。 TCP/IP模型 是把OSI的五六七层合称 应用层 传输层名字没变。 网络层改称网际互联层.第一二层合称网络访问层
应用层pdu:message (http,ftp,smtp) 传输层pdu:segment (tcp,udp)网络层pdu:datagram (ip,arp,icmp)链路层pdu:frame (协议不要求)物理层传输单位:二进制位(这个不要求) 记住这五层就ok!

网络上主要协议的头部汇总
随着网络技术的发展和网络应用的深入,网络的复杂性在不断增长,对网络设备管理的要求也日益增加。网络的复杂性,使得被管理的设备在系统中不是集中的,而是分散的。管理这样分散、复杂的系统,必须依靠网络设备管理系统。一个典型的网络设备管理系统包括4个组成部分:管理器、管理代理、管理信息数据库和受托代理。一般说来,前3个部分是必需的,第4个根据需要选择使用。在网络设备管理系统中,管理器协助网络管理员完成管理整个网络的工作。网络管理软件要求管理代理定期收集重要的设备信息,这些信息将用于确定网络设备和网络整体运行状态是否正常。管理器应该定期查询管理代理收集到的设备运转状态、配置及性能等方面的信息。管理代理(Agent)是一种特殊的软件或固件,包含了一个特定设备及该设备所处环境的信息。当一个管理代理被安装到一个设备上时,这个设备就被列为“被管理的”。管理代理可以获得所驻留设备的运转状态、设备特性和系统配置等相关信息。它就像是每个被管理设备的经纪人,完成管理器布置的信息采集任务。管理代理行使管理系统与管理代理所驻留设备的中介职能,通过管理信息数据库(MIB)中的内容来管理该设备。管理信息数据库中所包含的数据,随被安装设备的不同而不同。安装在网络管理工作站上的管理器,向管理代理收集设备信息时有轮询和中断两种方法。网络管理工作站可以通过轮询管理代理获得关于设备的信息,可以修改、增加或者删除代理中的表项,可以为设备中特定的事件设置阈值。当设备中发生某个闽值超过设定范围的异常事件时,管理代理可以立即向网络管理工作站发送自陷信息,通过基于中断的方法通知网络管理工作站进行处理。在一些特殊情况下,一个特定设备可能因为系统资源的缺乏,或者因为该设备不支持管理代理所需要的传输协议,而不能实现管理代理。这时可以使用受托代理(Proxyagent)。受托代理不在被管理的网络设备上运行,而是在另一台设备上运行。受托代理把它接收到的网络管理工作站命令,翻译成被托管设备所支持的管理命令。因此,受托代理发挥着应用程序网关的作用,在标准网络设备管理器软件和不直接支持该标准协议的系统之间充当桥梁。管理器和管理代理在通过网络进行通信时,必须遵循特定的协议。使用最普遍的协议是简单网络管理协议(SNMP,SimpleNetworkManagementProtocol)。它是一个应用层协议,属于TCP/IP协议族的一部分。SNMP协议目前有两个版本:SNMPv1和SNMPv2。这两个版本有一些共同特性,但SNMPv2提供了一些加强的功能。另外一个版本SNMPv3的标准化也在进行当中。SNMPv3的重点是安全、可管理的体系结构和远程配置。SNMP是分布式的管理协议,一个系统可以只作为SNMP管理器或SNMP代理中的单一角色,也可以同时完成这两者的功能。如果一个系统既作为管理器,又作为代理的话,此时可能需要另外一台管理器,用它来查询被管理的设备,并提供信息的汇总等。SNMP不是一种面向连接的协议,它通过使用请求报文和返回响应的方式,在SNMP代理和管理器之间传送信息。这种机制减轻了SNMP代理的负担,提供了一种独有的方式来处理可靠性和故障检测方面的问题。SNMP协议还定义了数据包的格式,以及网络管理器和管理代理之间的信息交换,对管理代理的MIB数据对象进行控制,可用于处理管理代理定义的各种任务。目前SNMP协议中的身份验证方式被认为不够安全,主要原因是SNMP协议并不提供加密功能,也不保证在SNMP数据包交换过程中不能从网络中直接拷贝信息。只需使用一个数据包捕获工具就可把整个SNMP数据包解密。因此存在着许多安全方面的漏洞。很容易产生包括欺骗、修改信息、信息队列及信息泄漏等安全问题。

本文由 在线网速测试 整理编辑,转载请注明出处。