Java Socket-01 IP TCP UDP协议

1.协议

     TCP/IP 协议族主要协议有 IP 协议(互联网协议, Internet Protocol[ ] ), TCP 协议(传
输控制协议, Transmission Control Protocol[ ] ) 和 UDP 协议(用户数据报协议, User Datagram
Protocol[ ] )

    

 

 

 Application : 应用程序; Socket :套接字; Host :主机; Channel :通信信道; Ethernet :
以太网; Router :路由器; Network Layer :网络层; Transport Layer :传输层。

     上图展示了通信协议、 应用程序和主机和路由器中的套接字 API (应用程序接口, Application Programming Interface ) 之间的关系,同时也展示了数据流从一个应用程序到另一个应用程序的过程(使用 TCP 协议)。

     在 TCP/IP 协议族中,底层由基础的通信信道构成,如以太网或调制解调器拨号连接。这些信道由网络层( network layer ) 使用,而网络层则完成将分组报文传输到它们的目的地址的工作(也就是路由器的功能)。 TCP/IP 协议族中属于网络层的唯一协议是 IP 协议, 它使两个主机间的一系列通信信道和路由器看起来像是一条单一的主机到主机的信道。 

    IP 协议提供了一种数据报服务:每组分组报文都由网络独立处理和分发, 为了实现这个功能,每个 IP 报文必须包含一个保存其目的地址( address ) 的字段。但 IP 协议只是一个 " 尽力

而为 " ( best-effort ) 的协议: 它试图分发每一个分组报文, 但在网络传输过程中, 偶尔也会
发生丢失报文,使报文顺序被打乱,或重复发送报文的情况。 

    传输层( transport layer )提供了两种可选择的协议: TCP 协议和 UDP 协议。TCP 协议和 UDP 

协议有一个共同的功能, 即寻址。 IP 协议只是将分组报文分发到了不同的主机,很明显, 还需要更细粒度的寻址将报文发送到主机中指定的应用程序, 因为同一主机上可能有多个应用程序在使用网络。 TCP 协议和 UDP 协议使用的地址叫做端口号( port numbers ),都是用来区分同一主机中的不同应用程序。 TCP 协议和 UDP 协议也称为端到端传输协议(end-to-end transport protocols ), 因为它们将数据从一个应用程序传输到另一个应用程序,而 IP 协议只是将数据从一个主机传输到另一主机。 

    TCP 协议能够检测和恢复 IP 层提供的主机到主机的信道中可能发生的报文丢失、重复及其他错误。 TCP 协议提供了一个可信赖的字节流( reliable byte-stream ) 信道, 这样应用程序就不需要再处理上述的问题。TCP 协议是一种面向连接( connection-oriented )的协议:在使用它进行通信之前,两个应用程序之间首先要建立一个 TCP 连接,这涉及到相互通信的两台电脑的 TCP 部件间完成的握手消息( handshake messages ) 的交换。 

    UDP 协议并不尝试对 IP 层产生的错误进行修复,它仅仅简单地扩展了 IP 协议 " 尽力而为 " 的数据报服务,使它能够在应用程序之间工作,而不是在主机之间工作。因此,使用了 UDP 协议的应用程序必须为处理报文丢失、顺序混乱等问题做好准备。 

2.地址

    在 TCP/IP 协议中,有两部分信息用来定位一个指定的程序:互联网地址( Internet address )和端口号( port number )。 其中互联网地址由 IP 协议使用, 而附加的端口地址信息由传输协议( TCP 或 IP 协议) 对其进行解析。 

    

3.名字

    互联网协议只能处理二进制的网络地址, 而不是主机名。 首先应该明确的是, 使用主机名而不使用地址是出于方便性的考虑, 这与 TCP/IP 提供的基本服务是相互独立的。 你也可以不使用名字来编写和使用 TCP/IP 应用程序。 当使用名字来定位一个通信终端时, 系统将做一些额外的工作把名字解析成地址。 有两个原因证明这额外的步骤是值得的: 第一, 相对于点分形式(或 IPv6 中的十六进制数字串), 人们更容易记住名字; 第二, 名字提供了一个间接层, 使 IP 地址的变化对用户不可见。 

4.客户端与服务器

    一个程序是作为客户端还是服务器, 决定了它在与其对等端( peer ) 建立通信时使用的套接字 API 的形式(客户端的对等端是服务器,反之亦然)。更进一步来说,客户端与服务器端的区别非常重要,因为客户端首先需要知道服务器的地址和端口号,反之则不需要。如果有必要, 服务器可以使用套接字 API , 从收到的第一个客户端通信消息中获取其地址信息 。只要通信连接建立成功,服务器和客户端之间就没有区别了。 

     客户端如何才能找到服务器的地址和端口号呢?客户端知道服务器的名字,再通过名字解析服务获取其相应的互联网地址。获取服务器的端口号则是另一种情况。 服务器可以使用任何端口号, 但客户端必须能够获知这些端口号。 

5.Socket(套接字)

    Socket (套接字) 是一种抽象层, 应用程序通过它来发送和接收数据,一个 socket 允许应用程序添加到网络中, 并与处于同一个网络中的其他应用程序进行通信。 一台计算机上的应用程序socket 写入的信息能够被另一台计算机上的另一个应用程序读取,反之亦然。 



 

 Applications :应用程序; TCP sockets : TCP 套接字; TCP ports : TCP 端口; Socket
References : 套接字引用; UDP sockets : UDP 套接字; Sockets bound to ports : 套接字绑定到
端口; UDP ports : UDP 端口。

 

    上描述了一个主机中,应用程序、套接字抽象层、协议、端口号之间的逻辑关系。值得注意的是一个套接字抽象层可以被多个应用程序引用。每个使用了特定套接字的程序都可以通过那个套接字进行通信。前面已提到, 每个端口都标识了一台主机上的一个应用程序。实际上, 一个端口确定了一台主机上的一个套接字。 主机中的多个程序可以同时访问同一个套接字。 在实际应用中, 访问相同套接字的不同程序通常都属于同一个应用(例如, Web 服务程序的多个拷贝),但从理论上讲,它们是可以属于不同应用的。 

 

     不同类型的 socket 与不同类型的底层协议族以及同一协议族中的不同协议栈相关联TCP/IP 协议族中的主要 socket 类型为流套接字 sockets sockets )和数据报套接字( datagram sockets )。 

    流套接字将 TCP 作为其端对端协议(底层使用 IP 协议),提供了一个可信赖的字节流服务。一个 TCP/IP 流套接字代表了 TCP 连接的一端。

    数据报套接字使用 UDP 协议(底层同样使用 IP 协议),提供了一个 " 力而为 " best-effort ) 的数据报服务, 应用程序可以通过它发送最长 65500 字节的个人信息。

    一个 TCP/IP 套接字由一个互联网地址, 一个端对端协议( TCP UDP 协议) 以及一个端口号唯一确定。 

猜你喜欢

转载自xujava.iteye.com/blog/1894541
今日推荐