网络编程面试题详解

  1. 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 地址好比为电话号码,而端口号就好比为分机号。
  2. 介绍 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 参考模型中的数据链路层和物理
    层合并为主机到网络层。
  3. 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 适合用于传输小量数据
  4. 什么是 Socket 编程
    Socket 编程的定义如下:
    所谓 socket 通常也称作"套接字",用于描述 IP 地址和端口,是一个通
    信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
    我们开发的网络应用程序位于应用层,TCP 和 UDP 属于传输层协议,
    在应用层如何使用传输层的服务呢?在应用层和传输层之间,则是使用套接
    字来进行分离。
    套接字就像是传输层为应用层开的一个小口,应用程序通过这个小口向
    远程发送数据,或者接收远程发来的数据;而这个小口以内,也就是数据进
    入这个口之后,或者数据从这个口出来之前,是不知道也不需要知道的,也
    不会关心它如何传输,这属于网络其它层次的工作。
    Socket 实际是传输层供给应用层的编程接口。传输层则在网络层的基
    础上提供进程到进程问的逻辑通道,而应用层的进程则利用传输层向另一台
    主机的某一进程通信。Socket 就是应用层与传输层之间的桥梁
    使用 Socket 编程可以开发客户机和服务器应用程序,可以在本地网络
    上进行通信,也可通过 Internet 在全球范围内通信。
    生活案例 1 如果你想写封邮件发给远方的朋友,如何写信、将信打包,
    属于应用层。信怎么写,怎么打包完全由我们做主;而当我们将信投入邮筒
    时,邮筒的那个口就是套接字,在进入套接字之后,就是传输层、网络层等
    (邮局、公路交管或者航线等)其它层次的工作了。我们从来不会去关心信
    是如何从西安发往北京的,我们只知道写好了投入邮筒就 OK 了。
    生活案例 2:可以把 Socket 比作是一个港口码头,应用程序只要将数
    据交给 Socket,就算完成了数据的发送,具体细节由 Socket 来完成,细节
    不必了解。同理,对于接收方,应用程序也要创建一个码头,等待数据的到
    达,并获取数据。
  5. 简述基于 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 方法关闭。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值