TCip协议的特征是通过什么来区分不同的连接

ISO-on-TCP与TCP协议的不同之处
ISO-on-TCP与TCP协议的不同之处
1.&ISO-on-TCP(RFC1006)协议与TCP协议的主要区别就是前者没有确认机制而后者有,而且前者只能应用与西门子的编程组态软件体系中(可以看作是西门子本身封装的协议),而后者可以应用于标准的TCP/IP场合。可以参考以下链接:&&&&&&&&&&&&2.&CPU&315-2PN/DP只支持TCP/IP和S7协议,不支持ISO-on-TCP协议。&&&&3.&WinCC和CPU&315-2PN/DP连接只能使用TCP/IP通道,不能使用Industrial&Ethernet通道。&&&&4.&不需要在Set&PG/PC&interface中为WinCC分配设备,因为S7ONLINE是给STEP7专用的。直接在WinCC的TCP/IP通道上右键“系统参数”--“单元”--“逻辑设备名称”,选择TCP/IP--&本地网卡即可,不能选择ISO&Ethernet--&本地网卡(是给Industrial&Ethernet用的)。&&&&5.&TCP/IP(Auto)相对TCP/IP而言,多了跨逻辑网段访问的功能,可以给PG添加多个IP地址,以前试过好像没什么用。&&&&6.&可以使用OPEN&TCP的方式连接两个CPU&315-2PN/DP,不需要在NetPRO中建立连接,需要编程建立/断开连接,发送/接收数据,可以参考以下链接:&&&&&&&&也可以在NetPRO中建立TCP连接,调用FC5(AG_SEND)/FC6(AG_RECV)编程,可以参考以下链接:&&&&&&&&还可以在NetPRO中建立S7连接,调用FB14(GET)/FB15(PUT)进行单边编程,可以参考以下链接:&&&&&&&&7.&可以使用iMAP组态PN&CBA通讯,如果楼主使用WinCC作为上位机软件,PN&CBA通讯仅限于PLC之间,因为WinCC没有PN接口。即两个CPU&315-2PN/DP之间采用CBA通讯,而它们和WinCC之间还是普通的工业以太网。不过iMAP对于复杂或大量PLC系统更能显示组态优势,而且需要单独购买,楼主的系统不大,似乎没有必要,采用6中的方式即可。&&&问题补充:&&&1.&Step7编程下载时需要在Set&PG/PC&interface中把S7ONLINE(STEP7)指向TCP/IP--&本地网卡,而使用WinCC通讯时,可以不用管Set&PG/PC&interface的设置,直接在WinCC的TCP/IP通道上右键“系统参数”--“单元”--“逻辑设备名称”,选择TCP/IP--&本地网卡即可。&&&2.&一般来说,Step7&V5.3之后的版本已经自带了Softnet&IE(普通网卡)的驱动,所以不装Simatic&net,WinCC也可以和PLC通过以太网通信。不过,要是通信不上就的安装Simatic&net,这可能和系统中的软件兼容性有关。&&&3.&OPEN&IE(TCP)的方式不需要在NetPRO中建立连接,因为连接的建立/断开,发送/接受都是同T-block编程实现的;而TCP和S7连接都需要在NetPRO中建立相应的连接,具体的步骤楼主可以参考我列出的链接文档,里面都有详细的步骤。&&&4.&S7连接是第七层(应用层)的协议,包括MPI/Profibus/Ethernet等接口,是西门子自己封装的,不是通用的标准协议,仅限于西门子自己的设备之间通信使用。&&&5.&楼主在Step7中把两个CPU&315-2PN/DP分配在一个Ethernet中,这是物理上的连接,相当于把两个PN接口用网线连接在一起,还不能确定这是什么连接,因为还没有建立基于什么协议的连接。如果建立TCP连接,那么以太网上跑的就是TCP/IP协议,而建立S7连接,那么以太网上跑的就是S7连接。&&&6.&楼主理解正确,T-block建立的每一个连接都是发送/接收形式的,所以如果有其他站就需要再建立一个新连接,当然也可以动态分配连接参数,但在连接资源允许的情况下,有一个通讯伙伴就建立一个通信连接。&&&7.&OPEN&TCP传送的具体的字节参数就不太好一概而论了,因为还牵涉到CPU程序处理时间和通信处理时间的分配等其他因素,功能块调用一次的数据通信限制应该是8K。最优的参数设置楼主还是试验一下为好。
发表评论:
TA的最新馆藏[转]&[转]&TCP/IP传输层协议
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
TCP/IP传输层协议
当在Windows XP中同时运行多个网络应用程序时,每个应用程序都会产生自己的
数据流,传输层是用什么方法区分不同应用程序的数据流呢?
在数据流被分段(分组)以后,传输层依靠什么来重新组装这些数据流呢?
如果某个数据段在传输过冲中丢失了或重复了,可靠的传输协议依据什么去要求
重传这些数据或丢弃多余的数据呢?
带着这些问题,下面来谈论传输层所提供的服务。
传输层的主要功能是分割并重新组装上层提供的数据流,为数据流提供端对端的
传输服务。
在TCP/IP协议中,有两个传输层协议:传输控制协议(TCP)和用户数据包协议(UDP)
TCP是一个可靠的面向连接的协议,UDP是不可靠的或非连接的协议。这种面向连接和
非连接的通信方式的区别,就像打电话和寄明信片一样。打电话的双方在正式通话之
前都会说&喂&,确定对方在线以后才开始通话,会话结束时都要说&再见&,然后
才挂下电话。而寄明信片却没有这种机制,寄出去了但不管对方是否收到。
每个应用程序都会产生自己的数据流,这些数据流可以把目标主机上相应的服务程序
看作自己的目的地,对于传输层来说,它只需要知道目标主机上的哪个服务程序来响
应这应用程序,而不需要知道这个服务程序具体是干什么的。因此,传输层使用一个
抽象的端口号来标识这些应用程序和服务程序。
端口号的功能及应用特点
端口号用来跟踪网络间同时发生的不同会话。TCP和UDP可以同时接收多个应用程序送
来的数据流,用端口号来区分他们,然后送给适当的应用程序处理。这时多路分解技
术的体现,它可以确保正确的用户程序收到正确的数据。因此,每个应用程序发送数
据前都会与操作系统进行协商,获得响应的源端口号和目标端口号。
在主机发送应用程序的数据之前,都必须确认端口号,如何分配这些端口号呢?一般
有两种情况,使用中央管理机构统一分配的端口号和使用动态绑定。
使用中央管理机构统一分贝的端口号。应用程序的开发者们都默认在RFC1700中定义的
特殊端口号,在进行软件设计时,都要遵从RFC1700中定义的规则,不能随便使用已经
定义的端口号,那么系统将在一个特定的取值范围随机地为应用程序分配一个端口号。
例如,任何Telnet应用中的会话都应用标准端口号23。
使用动态绑定。如果一个应用程序的会话没有涉及到特殊的端口号,那么系统将在一个
特定的取值方位内随机地为应用程序分配一个端口号。在应用程序进行通信以前,如果
不知道对方的端口号,就必须发送请求以获得对方的端口号。
RFC(Request for Comments,征求意见资料)是一个资料系列,始创于1969年,其中描述
了关于Internet的协议实验,并不是所有RFC资料都是描述Internet标准的,但所有
Internet标准都是作为RFC资料编写的。RFC资料中提交的协议都是Internet研究人员和
开发人员根据自己的情况建立、修改和扩充的,因此不同于CCITT(国际电报电话咨询委
员会)&和ANSI(美国国家标准协会)等组织所倡导的并经过正式评审和标准化处理的协议
Internet RFC有3种状态:Proposed(提案)、Draft(草案)和Full(标准)。
TCP/IP的设计者们采用一种混合方式实现端口号地址的管理,终端系统利用源系统端口
号来选择合适的应用程序,但是源系统的源端口号由源系统动态分配。
常用的端口号介绍
目前的端口号的分配情况大致如下:
小于255的端口号用于公共应用
255~1023是特定供应商应用程序的注册端口号
高于1023的端口号未作规定。
常用应用层协议或应用程序
RPC(远程调用)
下面举例说明端口号的使用过程。
主机A要Telnet到主机B。主机A首先向TCP请求一个可用端口,假如TCP分配一个为1088
的端口,主机A将目标端口号置为23。A和B通信以后,B看到A过来的端口号为23,就知
道这时Telnet应用,它就会为此创建一个Telnet会话。
假如同一系统中有多个Telnet用户,会发生什么情况呢?当主机A上第二个用户要Telne到
主机B时(其实是在主机A与主机B之间建立第二个Telnet进程),主机A的第二个用户向TCP
TCP会选出另外一个可使用的端口号,假如为10099,给第二个用户。主机B上便会创建
第二个Telnet会话。
所以在统一IP地址上具有不同端口号的两个连接是不同的。IP地址和端口号被用来唯一地
确定数据连接的途径。
UDP是TCP/IP的另一个非常重要的协议。
UDP数据域的头部共占用了8个字节
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UDP数据域的头格式描述
调用的端口号
被调用的端口号
记录UDP数据包中的8位组数目包括UDP数据的长度
最小值为8(数据部分为0时)
头标和数据域计算的校验和,这一项是可选的,为的
是在高可靠性的网路上尽量减少开销
上层协议的数据
UDP为应用程序提供的是一种不可靠的、非连接的分组交付服务,UDP报文可能出现
丢失、重复、时延、乱序、连接失效的问题。但是正式由于它不提供这种可靠性,所
以它的开销很小。换句话说,UDP提供了一种在高效可靠的网络上传输数据而不用消
耗不必要的网络资源和处理时间的通信方式。使用UDP的协议包括TFTP、SNMP、DNS
DHCP。UDP很适合这种客户机像服务器发送简单服务请求的环境,因为这种服务的开
销本来就很小,如果在喀什或者结束时加入类似TCP三次握手的过程,网络的实际利用
将会变得很低。
UDP还可以用于操作信息的登录。例如,像日志服务器 syslog发送日志信息,采用UDP
不会导致多台设备向一台服务器发送日志信息而引起过载。
UDP依靠上层协议提供可靠性,包括处理报文的丢失、重复、时延、乱序、连接失效
等问题。如Real流格式媒体就是使用应用程序协议来保证数据的正确传输。
在上文中已经提到UDP为应用程序提供的是一种不可靠的、非连接的分组的交付服务。当网络硬件失效
或者负担太重时,数据段可能会产生丢失、重复、时延、乱序等现象,这些都会导致通信不正常。如果
让应用程序来负担差错检测和恢复的工作,将给程序员带来很多复杂的工作,所以使用独立的通信协议
来保证通信的可靠性是非常必要的。
传输控制协议TCP是在RFC793中定义的,它是一个面向连接的可靠的通信协议。总的来说,TCP主要提
供主要提供一下服务。
面向连接的虚电路:这有些和打电话相似,在开始传输之前,通信双方要进行三次握手来建立连接,以保
证连接的可靠性。在传输过程中,通信双方的协议模块继续进行通信,以确保正确到达(例如,接收会用
ACK应答发送方的报文段,发送方对未被应答的报文段提供重传)。如果在传输过程中通信失败了(例如传
输路径上的某个网络接口失效),通信双方都会收到错误报告。在通信结束时,通信双方会使用改进的三次
握手来关闭连接。
面向流:当通信双方传输大量数据时,TCP将数据流看作可分为字节的流,进行分段(分组),接收方将收到
的报文段按原有顺序复原。
流量控制,避免拥塞;为了提高传输效率和减少网络通信量(协议之间的通信),TCP会尽量一次传输足够多
多路分解技术(多路复用技术):用端口号来实现。
全双工连接:TCP提供全双工连接,可以在一条连接上同时传输两个独立的、流向相反的数据流。
TCP头共占用了20个字节
调用的端口号
被调用的端口号
确保数据到达的序列正确的编号
期望下一个TCP数据段
数据偏移(头长度)
以32位为单位的报头长度
开始、终止会话之类的控制功能
用来控制流量
头标和数据域计算的校验和
指示紧急数据的末端
当前定义项:TCP端的最大值
上层协议的数据
建立TCP连接:三次握手
TCP是面向连接的,在面向连接的环境中,开始传输数据之前,在两个终端之间必须先建立一个连接。建立
连接的过程可以却确保通信双方在发送应用数据包之前静静准备好了传送和接收数据。对于一个要建立的连
接,通信双方必须用彼此的初始化序列号seq和来自对方成功传输确认的应答号ack来同步。(ack号致命希望收
到的下一个八位组的编号)习惯上将同步信号写为SYN,应答信号为ACK。整个同步的过程称为三次握手。
1)主机A发送SYN给主机B:我的序列号seq是X。
2)主机B发送SYN、ACK给主机A:我的序列号seq是X+1,应答号是X+1(等待接收第X+1号八位组)。
3)主机B发送SYN、ACK给主机B:我的序列号seq是X+1,应答号是Y+1.
&&&通过以上3个步骤(三次握手),TCP连接连接建立,开始传输数据。任何机器上的TCP都能被动地
&&&等待握手或主动地发起握手。一旦连接建立,数据可以对等地双向流动。
如果TCP使用1作为每次建立连接的初始化序列号,当本地系统重启后,远程系统会认为以前的连接依然存
在。所以每次连接时,主机都会随机选择一个初始化序列号,用它来辨别所传输的八位组在数据流中的位
置。然后双方要对各自的序列号进行协商,因为接收收到第一个SYN时,他并不知道这是否一个被延迟的
旧信号。所以它必须要求发送验证这个SYN。
一般情况下,TCP使用最少信息的报文段来实现三次握手,这对减少网络通信流量是有效的。总之,三次握
手使通信双方做好了传输数据的准备,并且使通信通信双方统一了初始化序列号。
关闭TCP连接:改进的三次握手
对于一个已经建立的连接,TCP使用改进的三次握手来结束通话(使用一个带有FIN附加标记的报文段)。
1)当主机A的应用程序通知TCP数据已经完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN理解为
&&&finish)。
2)主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是向主机A发送一个确认ACK,同时
&&&同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK为了防止在这段时间内,对方重传FIN报文段)。
3)主机B的应用程序告诉TCP:我要彻底的关闭的关闭连接,TCP向主机A送第二个FIN报文段。
4)主机A收到第二个FIN报文段后,向主机B发送一个ACK表示连接彻底关闭。&
TCP的可靠性
TCP是面向流的,即数据段被当作字节的序列化进行传输。
在通过三次握手建立连接时,序列号被初始化。在传输过程中,TCP继续使用这个序列号来标记每一个发送的数据段
没发送一个数据段,序列号加1.接收站点一句序列号重新组装缩所收到数据段。为什么要依靠序列号来重组数据段呢?
例如,在一个告诉高速链路与低速链路并存的网络上,可能会出现高速链路比低速链路上的数据段提前到达的情况,
此时就必须依靠序列号来重组数据段,这就是序列号的作用之一。
在传输过程中,确认号ACK的作用是告诉发送端那些数据包已经成功接收,并且确认号会向发送端指出了接收端希望
收到的下一个数据段的序列号,这种机制称为预期确认,即确认号等于下一个预期的位元组。
在TCP/IP网络中,存在超时与重传两种现象。如果在传输过程中丢失了某个序列号的数据段,导致发送端在给定时间
间隔内得不到那个数据段的应答,那么那个丢失数据段就会被要求重发。数据段会被保存在发送端的缓冲区中,直
到发送端接收到应答号,它才会释放这个缓冲区。这种机制被称为肯定确认与重新传输(Positive Acknowledgement and
Retransimission,PAR),他是虚脱通信协议用来确保可信度的一种技术。
序列号的第二个作用就是消除网络中的重复包(同步复制)。例如在网络拥塞时,发送端迟迟没有收到接收端某个数据段
的ACK包,它可能会认为这个序列号的数据段丢失了,于是它会重新发送,这种情况可能会导致接收端在网络恢复正
常后收到两个同样序列号的数据段,此时接收端会自动丢弃第二个一样数据段。
序列号和应答号为TCP提供了一种纠错机制,提高了TCP的可靠性。
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reservedsocket连接和http连接的区别
首先一定要明白:
HTTP协议:简单对象访问协议,对应于应用层,HTTP协议是基于TCP连接的
tcp协议: 对应于传输层
ip协议: 对应于网络层
TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。
Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;
socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息~~具体心跳消息格式是开发者自己定义的
1、TCP连接
要想明白Socket连接,先要明白TCP连接。手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在&无差别&的网络之上。
建立起一个TCP连接需要经过&三次握手&:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过&四次握手&(过程就不细写了,就是服务器和客户端交互,最终确定断开)
2、HTTP连接
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为&一次连接&。
1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种&短连接&,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次&保持连接&的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端&在线&。若服务器长时间无法收到客户端的请求,则认为客户端&下线&,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
3、SOCKET原理
3.1套接字(socket)概念
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
3.2 建立socket连接
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
4、SOCKET连接与TCP连接
创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。
5、Socket连接与HTTP连接
由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
而HTTP连接使用的是&请求&响应&的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在&询问&服务器是否有新的数据,如果有就将数据传给客户端。
要想理解socket首先得熟悉一下TCP/IP协议族,TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准,
从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中
应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
传输层:TCP,UDP
网络层:IP,ICMP,OSPF,EIGRP,IGMP
数据链路层:SLIP,CSLIP,PPP,MTU
每一抽象层建立在低一层提供的服务上,并且为高一层提供服务,看起来大概是这样子的
在TCP/IP协议中两个因特网主机通过两个路由器和对应的层连接。各主机上的应用通过一些数据通道相互执行读取操作
我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。
能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种&打开&读/写&关闭&模式的实现,服务器和客户端各自维护一个&文件&,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
socket通信流程
socket是&打开&读/写&关闭&模式的实现,以使用TCP协议通讯的socket为例,其交互流程大概是这样子的
服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket
服务器为socket绑定ip地址和端口号
服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开
客户端创建socket
客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket
服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求
客户端连接成功,向服务器发送连接状态信息
服务器accept方法返回,连接成功
客户端向socket写入信息
服务器读取信息
客户端关闭
服务器端关闭
在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接
第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认
第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
定睛一看,服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'}

我要回帖

更多关于 ping基于什么协议 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信