- IP 地址和端口号
1)IP 地址
用来标志网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。
2)IP 地址分类
IPV4:32 位地址,以点分十进制表示,如 192.168.0.1
IPV6:128 位(16 个字节)写成 8 个 16 位的无符号整数,每个整数用
四个十六进制位表示,数之间用冒号(:)分开,如:
3ffe:3201:1401:1280:c8ff:fe4d:db39:1984
3)特殊的 IP 地址
127.0.0.1 本机地址
192.168.0.0--192.168.255.255 私有地址,属于非注册地址,专门为组
织机构内部使用。
4)端口:port
IP 地址用来标志一台计算机,但是一台计算机上可能提供多种应用程序,
使用端口来区分这些应用程序。 端口是虚拟的概念,并不是说在主机上
真的有若干个端口。通过端口,可以在一个主机上运行多个网络应用程
序。 端口范围 0---65535,16 位整数
5)端口分类
公认端口 0—1023 比如80端口分配给WWW,21端口分配给FTP,
22 端口分配给 SSH,23 端口分配给 telnet,25 端口分配给 smtp
注册端口 1024—49151 分配给用户进程或应用程序
动态/私有端口 49152--65535
6)理解 IP 和端口的关系
IP 地址好比每个人的地址(门牌号),端口好比是房间号。必须同时指定
IP 地址和端口号才能够正确的发送数据
IP 地址好比为电话号码,而端口号就好比为分机号。 - 介绍 OSI 七层模型和 TCP/IP 模型
OSI(Open System Interconnection),开放式系统互联参考模型 。是
一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了 7 层。每一层
都有相关、相对应的物理设备,比如常规的路由器是三层交换设备,常规的
交换机是二层交换设备。OSI 七层模型是一种框架性的设计方法,建立七层
模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的
功能就是帮助不同类型的主机实现数据传输。它的最大优点是将服务、接口
和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系
统不同的网络之间实现可靠的通讯。
TCP/IP 协议是Internet 最基本的协议、Internet 国际互联网络的基础,
主要由网络层的 IP 协议和传输层的 TCP 协议组成。TCP/IP 定义了电子设
备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了 4 层
的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。
ISO 制定的 OSI 参考模型的过于庞大、复杂招致了许多批评。伴随着互
联网的流行,其本身所采用的 TCP/IP 协议栈获得了更为广泛的应用和认可。
在 TCP/IP 参考模型中,去掉了 OSI 参考模型中的会话层和表示层(这两层
的功能被合并到应用层实现)。同时将 OSI 参考模型中的数据链路层和物理
层合并为主机到网络层。 - TCP 协议和 UDP 协议的比较
TCP 和 UDP 是 TCP/IP 协议栈中传输层的两个协议,它们使用 IP 路由功能
把数据包发送到目的地,从而为应用程序及应用层协议(包括:HTTP、SMTP、
SNMP、FTP 和 Telnet)提供网络服务。
TCP 的 server 和 client 之间通信就好比两个人打电话,需要互相知道
对方的电话号码,然后开始对话。所以在两者的连接过程中间需要指定端口
和地址。
UDP 的 server 和 client 之间的通信就像两个人互相发信。我只需要知
道对方的地址,然后就发信过去。对方是否收到我不知道,也不需要专门对
口令似的来建立连接。具体区别如下:
1)TCP 是面向连接的传输。UDP 是无连接的传输
2)TCP 有流量控制、拥塞控制,检验数据数据按序到达,而 UDP 则相
反。
3)TCP 的路由选择只发生在建立连接的时候,而 UDP 的每个报文都要
进行路由选择
4)TCP 是可靠性传输,他的可靠性是由超时重发机制实现的,而 UDP
则是不可靠传输
5)UDP 因为少了很多控制信息,所以传输速度比 TCP 速度快
6)TCP 适合用于传输大量数据,UDP 适合用于传输小量数据 - 什么是 Socket 编程
Socket 编程的定义如下:
所谓 socket 通常也称作"套接字",用于描述 IP 地址和端口,是一个通
信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
我们开发的网络应用程序位于应用层,TCP 和 UDP 属于传输层协议,
在应用层如何使用传输层的服务呢?在应用层和传输层之间,则是使用套接
字来进行分离。
套接字就像是传输层为应用层开的一个小口,应用程序通过这个小口向
远程发送数据,或者接收远程发来的数据;而这个小口以内,也就是数据进
入这个口之后,或者数据从这个口出来之前,是不知道也不需要知道的,也
不会关心它如何传输,这属于网络其它层次的工作。
Socket 实际是传输层供给应用层的编程接口。传输层则在网络层的基
础上提供进程到进程问的逻辑通道,而应用层的进程则利用传输层向另一台
主机的某一进程通信。Socket 就是应用层与传输层之间的桥梁
使用 Socket 编程可以开发客户机和服务器应用程序,可以在本地网络
上进行通信,也可通过 Internet 在全球范围内通信。
生活案例 1 如果你想写封邮件发给远方的朋友,如何写信、将信打包,
属于应用层。信怎么写,怎么打包完全由我们做主;而当我们将信投入邮筒
时,邮筒的那个口就是套接字,在进入套接字之后,就是传输层、网络层等
(邮局、公路交管或者航线等)其它层次的工作了。我们从来不会去关心信
是如何从西安发往北京的,我们只知道写好了投入邮筒就 OK 了。
生活案例 2:可以把 Socket 比作是一个港口码头,应用程序只要将数
据交给 Socket,就算完成了数据的发送,具体细节由 Socket 来完成,细节
不必了解。同理,对于接收方,应用程序也要创建一个码头,等待数据的到
达,并获取数据。 - 简述基于 TCP 和 UDP 的 Socket 编程的主要步骤
Java 分别为 TCP 和 UDP 两种通信协议提供了相应的 Socket 编程类,
这些类存放在 java.net 包中。与 TCP 对应的是服务器的 ServerSocket 和客
户端的 Socket,与 UDP 对应的是 DatagramSocket。
基于 TCP 创建的套接字可以叫做流套接字,服务器端相当于一个监听器,
用来监听端口。服务器与客服端之间的通讯都是输入输出流来实现的。基于
UDP 的套接字就是数据报套接字,• 两个都要先构造好相应的数据包。
基于 TCP 协议的 Socket 编程的主要步骤
服务器端(server):
1. 构建一个 ServerSocket 实例,指定本地的端口。这个 socket 就是
用来监听指定端口的连接请求的。
2. 重复如下几个步骤:
a. 调用 socket 的 accept()方法来获得下面客户端的连接请求。通过
accept()方法返回的 socket 实例,建立了一个和客户端的新连接。
b. 通过这个返回的 socket 实例获取 InputStream 和
OutputStream,可以通过这两个 stream 来分别读和写数据。
c. 结束的时候调用 socket 实例的 close()方法关闭 socket 连接。
客户端(client):
1.构建 Socket 实例,通过指定的远程服务器地址和端口来建立连接。
2.通过 Socket 实例包含的 InputStream 和 OutputStream 来进行
数据的读写。
3.操作结束后调用 socket 实例的 close 方法,关闭。
UDP
服务器端(server):
1. 构造 DatagramSocket 实例,指定本地端口。
2. 通过 DatagramSocket 实例的 receive 方法接收
DatagramPacket.DatagramPacket 中间就包含了通信的内容。
3. 通过 DatagramSocket 的 send 和 receive 方法来收和发
DatagramPacket.
客户端(client):
1. 构造 DatagramSocket 实例。
2. 通过 DatagramSocket 实例的 send 和 receive 方法发送
DatagramPacket 报文。
3. 结束后,调用 DatagramSocket 的 close 方法关闭。