您的位置:首页 > 理论基础 > 计算机网络

【Java TCP/IP Soket】— 剖析TCP套接字连接

2013-12-19 14:19 302 查看
前言:

在Socket实例返回时(通过Socket公有构造函数,或者调用ServerSocket.accept( )方法),它就已经连接到一个远程终端,并通过协议的底层实现完成了TCP消息或握手信息的交换。

TCP连接:

1.TCP的开放握手:

TCP的开放握手也称为3次握手,因为这通常包括三条消息:



第一条:从客户端到服务端的连接请求;

第二条:从服务端到客户端的确认消息;

第三条:从客户端到服务端的确认消息;



这样客户端与服务端就已经成功建立了连接,通常这个过程发生得很快。然而,互联网是一种“尽力而为”的网络,TCP协议将以递增的时间间隔重复发送几次握手消息。如果TCP客户端在一段时间后还没有收到服务端的回复消息,则发生超时并放弃连接。这种情况下,Socket构造函数将抛出IOException异常。

注意:TCP连接的超时通常时间比较长,因此要经过几分钟Socket构造函数才会抛出异常;



2.连接剖析

下面将介绍“客户端建立连接”与“服务端建立连接”的过程,其中,客户端的IP表示为:A.B.C.D,服务端的IP表示为:W.X.YZ,端口表示为:Q

(1)客户端连接建立



如果在调用构造函数时,客户端没有指定本地IP和端口,底层实现则将向服务端发送数据报文的网络接口地址作为本地IP,同时选择一个没有被其它TCP套接字使用的本地端口(P)

(2)服务端套接字设置



服务器首先创建一个ServerSocket实例,并将其与已知端口相关联(Q),套接字实现为新的ServerSocket实例创建了一个底层数据结构,并将Q赋给本地端口,将特定的通配符地址(图中为“*”)赋给本地IP地址。(服务器也可能在构造函数中指定一个本地IP地址,但是通常不这样做。对于服务器主机有多个IP地址的情况,不指定本地地址能够接收发送到该服务器主机任何地址的连接请求)

(3)服务端确认握手消息



除了要设置服务端套接字外(创建一个新的底层套接字数据结构),服务器还要向客户端发回一个TCP握手确认消息。

(4)服务端accept( )处理



注意:在ServerSocket关联的列表中每个数据结构,都代表了一个与客户端已经完成建立的TCP连接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐