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 协议) 以及一个端口号唯一确定。
相关推荐
本项目“java -> TCP/UDP 连接测试 SocketTest”专注于通过Java语言实现对这两种协议的连接测试。下面我们将详细探讨TCP和UDP的特点、Java中的Socket编程以及如何进行连接测试。 TCP是一种面向连接的、可靠的传输...
本篇将深入探讨如何在Java环境中使用Socket进行TCP和UDP的文件传输。 TCP是一种面向连接的、可靠的传输协议,它通过三次握手建立连接,并确保数据包按顺序到达,如果数据包丢失,TCP会自动重传。在Java中,我们可以...
Java Socket编程是网络编程的基础,它提供了在TCP和UDP协议下进行通信的能力。在这个小Demo中,我们将深入探讨如何利用Java实现这两种协议的简单应用,以及如何在TCP服务器端使用多线程监听。 首先,TCP(传输控制...
### HP-Socket TCP & UDP 通信框架开发指南 (v4.2 20170420) #### 一、概述 ##### 1.1 整体架构 HP-Socket 是一款专为高性能 TCP/UDP/HTTP 通信设计的框架,它提供了包括服务端、客户端及 Agent 组件在内的全面...
本资源包提供了TCP和UDP协议的Socket编程实现,包括C语言、Java和Python三种编程语言的源代码示例,以及一份详细的实验报告书,帮助学习者深入理解这两种协议的工作原理及其应用。 TCP协议是一种面向连接的、可靠的...
在IT行业中,网络编程是不可或缺的一部分,特别是在Java开发中,TCP和UDP协议是网络通信的基础。本实验项目“tcp_udp_socket.zip”旨在帮助开发者理解如何使用Java实现TCP和UDP的Socket通信。以下将详细讲解这两个...
【Java网络开发--T/TCP协议的实现:插口层】这一主题主要涉及Java网络编程中TCP协议的具体实现,特别是T/TCP(TCP优化)在插口层的改动。...理解这些细节对于深入理解Java网络编程和TCP/IP协议的实现至关重要。
2) 基于Java Socket TCP和UDP实现一个简易的网络文件服务程序,包含服务器端FileServer和客户端FileClient; 3) 服务器端启动时需传递root目录参数,并校验该目录是否有效; 4) 服务器启动后,开启TCP:2021端口,...
1996 年,施耐德公司推出了基于以太网 TCP/IP 的 Modbus 协议:Modbus TCP。Modbus 协议是一项应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信,包括 ASCII、RTU、TCP 三种报文...
TCP(传输控制协议)和UDP(用户数据报协议)是实现这一目标的两种主要的通信协议。TCP提供面向连接的服务,确保数据包按顺序、无错误地到达目的地,而UDP则是一种无连接的服务,速度快但不保证数据包的顺序或完整性...
TCP(传输控制协议)和IP(互联网协议)是互联网通信的基石,而Java提供了一套强大的API来支持这两种协议的网络编程。 首先,TCP是一种面向连接的、可靠的传输协议。它确保数据在发送端与接收端之间的完整性和顺序...
在Java中,Socket提供了一种标准的方式来实现基于TCP(传输控制协议)和UDP(用户数据报协议)的网络通信。这两种协议在互联网通信中扮演着核心角色。 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。...
Java中的TCP和UDP Socket通信是网络编程的基础,用于在不同设备之间建立可靠的数据传输通道。TCP(Transmission Control Protocol)提供的是面向连接、有序且无损的服务,而UDP(User Datagram Protocol)则是无连接...
在C++或Java等语言中,创建UDP Socket通常涉及调用`socket()`函数,指定协议族(AF_INET)和协议类型(SOCK_DGRAM)。例如在C++中: ```cpp int socket_fd = socket(AF_INET, SOCK_DGRAM, 0); ``` 这会返回一个...
在IT行业中,网络编程是构建分布式系统和网络应用的基础,而TCP和UDP是两种最常用的传输层协议。本文将深入探讨TCP与UDP的区别,并通过Java编程语言解释如何实现文件上传功能。 TCP(Transmission Control Protocol...
在标题“Socket之tcp和udp”中,涉及的核心知识点是TCP(传输控制协议)和UDP(用户数据报协议),这两种协议是网络通信中常见的传输层协议。 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层...
Socket编程在IT领域中是网络通信的基础,尤其在TCP/IP协议栈中扮演着至关重要的角色。TCP/IP(Transmission Control Protocol/Internet Protocol)是一组通信协议,用于规定互联网上设备之间的数据传输方式。在这个...
通过对TCP/IP协议的理解、TCP与UDP的区别、三次握手与四次挥手的过程及其背后的原理等内容的学习,可以帮助开发者更好地应对实际项目中的网络编程挑战。希望以上内容对你有所帮助,在即将到来的面试中取得优异的成绩...
Java实现的Socket编程是基于TCP/IP协议的,它提供了一个可靠的数据流服务,可以实现客户端和服务器之间的数据交换。Java中的Socket类和ServerSocket类是两种基本的套接字类,Socket类用于建立客户端和服务器之间的...
- **Java实现**:Java的Socket类可以用来建立TCP连接,与Modbus TCP服务器进行交互。使用Modbus TCP库(如JModbus的TCPPort类),开发者可以创建Modbus TCP客户端或服务器。 5. **源码结构** 压缩包中的文件可能...