洛阳北大青鸟分享TCP/IP协议的一些基础知识?
相信大家在学习互联网网页开发的时候应该接触过关于网络协议的一些知识点吧。今天IT培训http://www.kmbdqn.cn/就来简单了解一下,关于TCP/IP协议的一些基础知识。1.TCP/IP的具体含义从字面意义上讲,有人可能会认为TCP/IP是指TCP和IP两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用IP进行通信时所必须用到的协议群的统称。具体来说,IP或ICMP、TCP或UDP、TELNET或FTP、以及HTTP等都属于TCP/IP协议。他们与TCP或IP的关系紧密,是互联网必不可少的组成部分。TCP/IP一词泛指这些协议,因此,有时也称TCP/IP为网际协议群。互联网进行通信时,需要相应的网络协议,TCP/IP原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是TCP/IP,TCP/IP就是互联网的协议。2.数据包包、帧、数据包、段、消息以上五个术语都用来表述数据的单位,大致区分如下:包可以说是全能性术语;帧用于表示数据链路层中包的单位;数据包是IP和UDP等网络层以上的分层中包的单位;段则表示TCP数据流中的信息;消息是指应用协议中数据的单位。每个分层中,都会对所发送的数据附加一个部,在这个部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。3.数据处理流程①应用程序处理先应用程序会进行编码处理,这些编码相当于OSI的表示层功能;编码转化后,邮件不一定马上被发送出去,这种何时建立通信连接何时发送数据的管理功能,相当于OSI的会话层功能。②TCP模块的处理TCP根据应用的指示,负责建立连接、发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个TCP部。③IP模块的处理IP将TCP传过来的TCP部和TCP数据合起来当做自己的数据,并在TCP部的前端加上自己的IP部。IP包生成后,参考路由控制表决定接受此IP包的路由或主机。④网络接口(以太网驱动)的处理从IP传过来的IP包对于以太网来说就是数据。给这些数据附加上以太网部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端。

如何进行tcp数据交互
这是我网络中找的参考,希望对你有帮助。 在多线程任务中,TCP任务通过三次握手能建立可靠的连接,但是经常会发生在数据传输或通信时发生网络突然断开或者长时间连接空循环监听而未进行操作,需要在软件设计时考虑程序运行中检测到服务器对客户端的这一“虚连接”现象。如果主机崩溃,write是否阻塞取决于内核的tcp缓冲区,但read将一直阻塞,直到超时ETIMEOUT,或由于某些中间路由器的原因返回EHOSTUNREACH/ENETUNREACH。select不能检测到该情况。如果主机崩溃并重起,客户的write到达主机时主机响应RST,客户的read将返ECONNRESET。此处的”非正常断开”指TCP连接不是以优雅的方式断开,如网线故障等物理链路的原因,还有突然主机断电等原因。心跳机制有两种方法可以检测:1.TCP连接双方定时发握手消息2.利用TCP协议栈中的KeepAlive探测第二种方法简单可靠,只需对TCP连接两个Socket设定KeepAlive探测,所以本文只讲第二种方法在Linux,Window2000下的实现(在其它的平台上没有作进一步的测试)1)Windows平台C代码//定义结构及宏struct TCP_KEEPALIVE {u_longonoff;u_longkeepalivetime;u_longkeepaliveinterval;} ;#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4)//KeepAlive实现TCP_KEEPALIVE inKeepAlive = {0}; //输入参数unsigned long ulInLen = sizeof(TCP_KEEPALIVE);TCP_KEEPALIVE outKeepAlive = {0}; //输出参数unsigned long ulOutLen = sizeof(TCP_KEEPALIVE);unsigned long ulBytesReturn = 0;//设置socket的keep alive为5秒,并且发送次数为3次inKeepAlive.onoff = 1;inKeepAlive.keepaliveinterval = 5000; //两次KeepAlive探测间的时间间隔inKeepAlive.keepalivetime = 5000; //开始首次KeepAlive探测前的TCP空闭时间if (WSAIoctl((unsigned int)s, SIO_KEEPALIVE_VALS,(LPVOID)&inKeepAlive, ulInLen,(LPVOID)&outKeepAlive, ulOutLen,&ulBytesReturn, NULL, NULL) == SOCKET_ERROR){ACE_DEBUG ((LM_INFO,ACE_TEXT ("(%P|%t) WSAIoctl failed. error code(%d)!n"), WSAGetLastError()));}//定义结构及宏 struct TCP_KEEPALIVE { u_longonoff; u_longkeepalivetime; u_longkeepaliveinterval; } ; #define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4) //KeepAlive实现 TCP_KEEPALIVE inKeepAlive = {0}; //输入参数 unsigned long ulInLen = sizeof(TCP_KEEPALIVE); TCP_KEEPALIVE outKeepAlive = {0}; //输出参数 unsigned long ulOutLen = sizeof(TCP_KEEPALIVE); unsigned long ulBytesReturn = 0; //设置socket的keep alive为5秒,并且发送次数为3次 inKeepAlive.onoff = 1; inKeepAlive.keepaliveinterval = 5000; //两次KeepAlive探测间的时间间隔 inKeepAlive.keepalivetime = 5000; //开始首次KeepAlive探测前的TCP空闭时间 if (WSAIoctl((unsigned int)s, SIO_KEEPALIVE_VALS, (LPVOID)&inKeepAlive, ulInLen, (LPVOID)&outKeepAlive, ulOutLen, &ulBytesReturn, NULL, NULL) == SOCKET_ERROR) { ACE_DEBUG ((LM_INFO, ACE_TEXT ("(%P|%t) WSAIoctl failed. error code(%d)!n"), WSAGetLastError())); }2)Linux平台C代码#include……////KeepAlive实现//下面代码要求有ACE,如果没有包含ACE,则请把用到的ACE函数改成linux相应的接口int keepAlive = 1;//设定KeepAliveint keepIdle = 5;//开始首次KeepAlive探测前的TCP空闭时间int keepInterval = 5;//两次KeepAlive探测间的时间间隔int keepCount = 3;//判定断开前的KeepAlive探测次数if(setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(void*)&keepAlive,sizeof(keepAlive)) == -1){ACE_DEBUG ((LM_INFO,ACE_TEXT ("(%P|%t) setsockopt SO_KEEPALIVE error!n")));}if(setsockopt(s,SOL_TCP,TCP_KEEPIDLE,(void *)&keepIdle,sizeof(keepIdle)) == -1){ACE_DEBUG ((LM_INFO,ACE_TEXT ("(%P|%t) setsockopt TCP_KEEPIDLE error!n")));}if(setsockopt(s,SOL_TCP,TCP_KEEPINTVL,(void *)&keepInterval,sizeof(keepInterval)) == -1){ACE_DEBUG ((LM_INFO,ACE_TEXT ("(%P|%t) setsockopt TCP_KEEPINTVL error!n")));}if(setsockopt(s,SOL_TCP,TCP_KEEPCNT,(void *)&keepCount,sizeof(keepCount)) == -1){ACE_DEBUG ((LM_INFO,ACE_TEXT ("(%P|%t)setsockopt TCP_KEEPCNT error!n")));}心跳机制:定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性。网络中的接收和发送数据都是使用WINDOWS中的SOCKET进行实现。但是如果此套接字已经断开,那发送数据和接收数据的时候就一定会有问题。可是如何判断这个套接字是否还可以使用呢?这个就需要在系统中创建心跳机制。其实TCP中已经为我们实现了一个叫做心跳的机制。如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不会影响你自己定义的协议。所谓“心跳”就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”。以确保链接的有效性。所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开。比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。发包方:可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项。系统默认是设置的是2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。心跳包一般来说都是在逻辑层发送空的包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样的空包回来,服务器如果在一定时间内收不到客户端发送过来的反馈包,那就只有认定说掉线了。只需要send或者recv一下,如果结果为零,则为掉线。但是,在长连接下,有可能很长一段时间都没有数据往来。理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的。更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉。在这个时候,就需要我们的心跳包了,用于维持长连接,保活。在获知了断线之后,服务器逻辑可能需要做一些事情,比如断线后的数据清理呀,重新连接呀当然,这个自然是要由逻辑层根据需求去做了。总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。TCP连接异常断开后操作系统会告诉你,你查询套接字的状态会得到异常,或者当发现函数失败WSAGetLastError的时候也会得到内核的通知。// 发送回应消息int nSend = Send4IntMsg(sock, (char*)(LPCTSTR)strSendBuf,strSendBuf.GetLength(), errMsg);if (nSend < 0) //发送消息失败closesocket(sock);//重新连接 在B/S编程和UDP编程时才用到心跳。比如定期向web服务器发一个request证明自己在线。http协议是请求一下就断开了,每次都要重新连接,重新请求,这种情况下才有必要用心跳机制。一般的TCP通信都是长连接,不可能频繁连接和断开。对于长期保持连接的情况,一旦断开,操作系统底层都会通知你,你需要解决的是如何获取到系统的通知。

本地连接的Internet协议(TCPIP)有什么用怎么设置
TCP/IP 的起源历史 早期的电脑,并非如我们日常生活中见到的个人 PC 那样细小;它们大都是以一个集中的中央运算系统,用一定的线路与终端系统(输入输出设备)连接起来。这样的一个连接系统,就是网路的最初出现形式。各个网路都使用自己的一套规则协定,可以说是相互独立的。在 1969 年,为美苏冷战期间,美国政府机构试图发展出一套机制,用来连接各个离散的网路系统,以应付战争危机的需求。这个计划,就是由美国国防部委托 Advanced Research Project Agency 发展的 ARPANET 网路系统,研究当部份电脑网路遭到工具而瘫痪后,是否能够透过其他未瘫痪的线路来传送资料。ARPANET 的构想和原理,除了研发出一套可靠的资料通讯技术外,还同时要兼顾跨平台作业。后来,ARPANET 的实验非常成功,从而奠定了今日的网际网路模式,它包括了一组电脑通讯细节的网路标准,以及一组用来连接网路和选择网路交通路径的协定,就是大名鼎鼎的 TCP/IP 网际网路协定。 时至 1983 年,美国国防部下令用于连接长距离的网路的电话都必须适应 TCP/IP,同时 Defense Communication Agency (DCA) 将 ARPANET (Advanced Research Projects Agency Net)分成两个独立的网路:一个用于研究用途,依然叫做 ARPANET;另一个用于军事通讯,则称为 MILNET (Military Network)。ARPA 后来发展出一个便宜版本,以鼓励大学和研究人员来采用它的协定,其时正适逢大部份大学电脑学系的 UNIX 系统需要连接它们的区域网路。由于 UNIX 系统上面研究出来的许多抽象概念与 TCP/IP 的特性有非常高度的吻合,再加上设计上的公开性,而导致其它组织也纷纷使用 TCP/IP 协定。从 1985 年开始,TCP/IP 网路迅速扩展至美国、欧洲好几百个大学、政府机构、研究实验室。它的发展大大超过了人们的预期,而且每年以超过 15% 的速度成长,到了 1994 年,使用 TCP/IP 协定的电脑已经超过三百万台之多。及后数年,由于 Internet 的爆炸性成长,TCP/IP 协定已经成为无人不知、无人不用的电脑网路协定了。TCP/IP 之标准制定虽然 ARPA 计划从 1970 年就开始发展交换网路技术,到了 1979 年 ARPA 组织了一个委员会叫做 Initernet Control and Configuration Board (ICCB),但事实上 TCP/IP 协定并不属于某一特定厂商和机构。它的标准是由 Internet Architecture Board (IAB) 所制定的。IAB 目前从属于 The Internet Society (ISOC),专门在技术上作监控及协调,且负责最终端评估及科技监控。IAB 组织除了自身的委员会之外,它主要包含两个主要团体:InternetResearch Task Force (IRTF) ,和 Internet Engineering Task Force (IETF)。这两个团体的职能各有不同,IRTF 主要致力于短期和中期的难题;而 IETF 则着重处理单一的特别事件,其下又分出许多不同题目的成员与工作小组,各自从事不同的研究项目,研发出网际网路的标准与规格。由于 TCP/IP 技术的公开性,它不属于任何厂商或专业协会所有,因此关于它的相关资讯,是由一个叫 Internet Network Information Center (INTERNIC) 来维护和发表,以及处理许多网路管理细节(如 DNS 等)。TCP/IP 的标准大部份都以 Request For Comment (RFC) 技术报告的形式公开。RFC 文件包含了所有 TCP/IP 协定标准,以及其最新版本。RFC 所涵盖的内容和细节非常广,也可以为新协定的标准和计划,但不能以学术研究论文的方式来编辑。RFC 有许多有趣且实用的资讯,并非仅限于正式的数据通讯协定规范而已。RFC 在全世界很多地方都有它的复制文件,可以轻易透过电子邮件、FTP 等方式从网际网路取得。例如,您可以可以用 guest 的身份 FTP 至 ds.internic.net 或 ftp://nic.merit.edu/internet/documents/rfc/ 下载相关的 RFC 文件。RFC 是依据其所写的时间顺序来编号的,不过 RFC1000 这份文件,可以用来做 RFC 文件的指引,却是一个不错的起始点。阅读及研究 RFC,恐怕是每一个网络系统管理员必不可少的题目了吧。TCP/IP 的应用TCP/IP 可以用在任何互连网路上的通讯,其可行性在许多地方都已经得到证实,包括了家庭、校园、公司以及全球 61 个国家实验室。例如在美国就有 National Science Foundation (NFS )、Department of Energy (DDE)、Department of Defense (DOD)、Health and Human Services Agency (HHS),以及 National Aeronautics and Space Administration (NASA),等大机构投注了相当大的资源来开发和应用 TCP/IP 网路。这些技术的应用,让所有与网路相连的研究人员能够和全世界的同僚们共同分享资料和研究成果,感觉就像隔壁一样。网路证明了 TCP/IP 的可行性和它优秀的整合性,使之能适应各种不同的现行网路技术。对今天的网路发展局面来说,TCP/IP 的实作可以说是一个卓越的成就。TCP/IP 协定不仅成功的连接了不同网路,而且许多应用程式和概念也是完全以 TCP/IP 协定为基础发展出来,从而让不同的厂商能够忽略硬体结构开发出共同的应用程式,例如今天应用广泛的 WWW、E-MAIL、FTP、DNS 服务等等。TCP/IP 的特性对于一个电子邮件的使用者来说,他无需透彻了解 TCP/IP 这个协定;但对于 TCP/IP 程式人员和网路管理人员来说,TCP/IP 的一些特性却是不能忽略的:· Connectionless Packet Delivery Service它是其它网路服务的基础,几乎所有封包交换网路都提供这种服务。TCP/IP 是根据信息中所含的位址资料来进行资料传送,它不能确保每个独立路由的封包是可靠和依序的送达目的地。在每一个连线过程中,线路都不是被“独占”的,而是直接映对到硬体位址上,因此特别有效。更重要的是,此种封包交换方式的传送,使得 TCP/IP 能适应各种不同的网路硬体。· Reliable Stream Transport Service因为封包交换并不能确保每一个封包的可靠性,因此我们就需要通讯软体来自动侦测和修复传送过程中可能出现的错误,和处理不良的封包。这种服务就是用来确保电脑程式之间能够建立连接和传送大量资料。关键的技术是将资料流进行切割,然后编号传送,然后透过接收方的确认(acknowledgement)来保证资料的完整性。· Network Technology Independent在封包交换技术中,TCP/IP 是独立与硬体之上的。TCP/IP 有自己的一套资料包规则和定义,能应用在不同的网路之上。· Universal Interconnection只要电脑用 TCP/IP 连接网路,都将获得一个独一无二的识别位址。资料包在交换的过程中,是以位址资料为依据的,不管封包所经过的路由之选择如何,资料都能被送达指定的位址。· End-to-End AcknowledgementsTCP/IP 的确认模式是以“端到端”进行的。这样就无需理会封包交换过程中所参与的其它设备,发送端和接收端能相互确认才是我们关心得。· Application Protocol StandardsTCP/IP 除了提供基础的传送服务,它还提供许多一般应用标准,让程式设计人员更有标准可依,而且也节省了许多不必要的重复开发。正式由于 TCP/IP 具备了以上那些有利特性,才使得它在众多的网路连接协定中脱颖而出,成为大家喜爱和愿意遵守的标准。TCP/IP 在网路中所扮演的角色TCP/IP 的全称是 Transmission Control Protocol / Internet Protocol (TCP/IP),当初是用来配合 ARPANET 来处理不同硬体之间的连接问题的,比如Sun系统和Mainframe、Mainframe和个人电脑之间的连接。Internet Protocol (IP) 工作于网路层,它提供了一套标准让不同的网路有规则可循,当然,前提是您想使用 IP 从一个网路将封包路由到另一个网路。IP 在设计上是用来在 LAN 和 LAN 及 P C 和 PC 之间进行传输,每一台 PC 或每一个 LAN,都可以由一组 IP 位址来区分。一个 IP 位址的格式是四个用小数点( . ) 分隔开来的十进位数字,每各数值介乎于 0 到 255 之间。实实上,每一组数字,在 IP 位址中是以 “Octet”的格式承现的,也就是完整的 8 个 bit 。我们会在后面的「网际网路层」中详细讲解 IP 位址的所包含的信息和功用。您可以把 IP 看成是游戏规则,而 TCP 则用来诠释这些规则的,更准确来说,TCP 在 IP 的基础之上,解释了参与通讯的双方是如何透过 IP 进行资料传送的。TCP 提供了一套协定,能够将电脑之间使用的资料透过网路相互传送,同时也提供一套机制来确保资料传送的准确性和连续性。设置: 右键单击“网上邻居”,选属性。在弹出对话框的“本地连接”上右键单击”,选属性。在弹出的对话框中双击Internet协议(TCP/IP)
TCP/IP的设置:1、校园网。直接勾选“自动获取”个人家用电脑。勾选“使用下面的IP地址”TCP/IP协议:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

简述TCP和UDP协议在通信原理上的区别和相同之处。哪位大侠帮忙做一下啊。要结合心得体会。
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务[1]包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。TCP支持的应用协议主要有:Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
TCP重安全,轻速度。遵循三次会话原则。一些比较重要的数据可以用它,可靠性比较高。 UDP轻安全,重速度。无连接传输数据协议,简单、不可靠的信息传输服务,就如:手机发短信,只要有对方手机号即可。

liunx怎么解决tcp连接timeout过长
不明白你说的老化时间,关于established的时间,摘录个别人的心得吧
TCP协议有个超时重传机制,想必大家都比较熟悉。TCP协议是一种传输可靠的协议,因此这个机制是必不可少的。那么今天要探讨的是在发送队列还有数据的情况下,网络连接异常断开后,协议栈是到底是怎样来处理这些数据的,资源又是怎样被回收的呢?
我这里先给出几个测试的结果:
1、修改linux系统下的tcp_retries2为1,当socket发送队列有一定数据时,突然切断网线,造成异常断链的场景,此时,大约过了1秒,用netstat观察established的连接消失;
2、继续把该参数修改为15,重复上面的实验,发现大约过了15分钟后,established的连接才断开;
3、把参数再次修改为5,大约过了7秒,连接消失
/proc/sys/net/ipv4/tcp_retries2
思考:TCP的超时后,重传的次数和重传的时间间隔是影响连接断开的主要参数。但是,从上面的实验数据来看,似乎没有什么规律。查阅linux帮助文档,发现这个重传的时间间隔与RTO有关,而这个参数又是协议栈通过检测网络状况而实时改变的。

本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/45626.html。