博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础教程——网络基础知识
阅读量:5227 次
发布时间:2019-06-14

本文共 4084 字,大约阅读时间需要 13 分钟。

参考阅读[中国互联网发展史]:https://zhuanlan.zhihu.com/p/61602252

协议

计算机网络中的通信必须有一些约定,这些约定称为“通信协议”。

通信协议规定了传输速率、传输代码、代码结构、传输控制步骤、出错控制等处理的标准。

通信协议中有两个重要的协议,IP协议和TCP协议。

IP协议:Internet Protocol,互联网协议,又称网际协议。

TCP协议:Transmission Control Protocol,传输控制协议。

这两个协议是互补的,实际使用中常统称为“TCP/IP协议”

TCP/IP协议最早出现在Unix操作系统中,现在各操作系统都支持,是Internet中最常用的基础协议。

国际标准化组织(ISO)在1978年提出了“开放系统互连”参考模型(OSI),用于制定计算机网络模型的标准。

然而,OSI只是一个参考标准,事实上的标准是TCP/IP模型。

1648799-20190714002516947-819401604.png

ISO:International Organization for Standardization,国际标准化组织

OSI:Open System Interconnection,开放系统互联

TCP/IP 的体系结构:

协议
应用层 各种应用层协议:HTTP, FTP, SMTP, DNS 等
运输层 TCP: 传输控制协议(Transmission Control Protocol)
UDP: 用户数据报协议(User Datagram Protocol)
网际层 IP: 网际协议
网络接口层

TCP与UDP:

TCP协议简介

TCP协议是面向连接的通信协议
传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
TCP协议通过三次握手建立连接,四次挥手断开连接。

主要说明三次握手:

|--第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
|--第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
|--第三次握手,客户端再次向服务器端发送确认信息,确认连接。
|--确认连接后,客户端和服务器开始进行数据传输。

由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等。

1648799-20190714002558909-66976526.png

↑三次握手四次挥手

UDP协议简介

UDP协议是不面向连接的协议
传输数据时,不需要建立连接,不管对方端服务是否启动,直接将数据、数据源和目的地都封装在数据包中,直接发送。
因为无连接,所以传输速度快,但是容易丢失数据,因此UDP是不可靠的协议。日常应用中,例如视频会议、QQ聊天等。

TCP与UDP的区别:

1.TCP面向连接;UDP不面向连接;
2.TCP效率较低,占用系统资源较高,确认机制,重传机制、拥塞控制机制等会消耗大量时间;UDP没有这些机制,效率较高。
3.TCP是流模式,UDP是数据报模式 ;
4.TCP保证数据正确性,UDP可能丢包;
5.TCP保证数据顺序,UDP不保证。

TCP_UDP.PNG

TCP/UDP笑话其一:

一个TCP程序包走进一家酒吧:我要一杯啤酒。
酒保:你要一杯啤酒?
程序包:是的,我要一杯啤酒。

TCP/UDP笑话其二:

A:你能给我解释一下什么是TCP么?
B:我开始解释了:你想听我解释一下TCP么?
A:嗯,我TCP。
B:好的,我会给你讲一个TCP的笑话。
A:好的,我会听你讲一个TCP的笑话。
B:你准备好听一个TCP的笑话么?
A:嗯,我准备好听一个TCP的笑话
B:Ok,那我要发TCP笑话了。大概有10秒,20个字。
嗯,我准备收你那个10秒时长,20个字的笑话了。
抱歉,你的连接超时了。你好,你想听TCP的笑话么。
B:过瘾不,没过瘾再来一个

TCP/UDP笑话其三:

"Let me tell you a UDP joke, but you might not get it."

网络数据传输:

1648799-20190714002705481-1028366761.png

IP地址

IP地址(Internet Protocol Address)

网络中有多台计算机,它们必须通过某种标识来区分每一台机器,这中标识就是IP地址。

如果把计算机比作电话,IP地址就相当于电话号码。

IP地址(IPv4)由4个字节共32位二进制数组成,类似于:192.168.0.8;

在网络寻找某一台计算机都是依靠它的IP地址(用域名或计算机名定位主机其实也是转成IP地址后再找到该主机的);
|-网络ID:网络ID标识了计算机所在的网段;
|-主机ID:主机ID标识了特定的主机

IPv4有大约42亿个。

IPv6采用128位地址长度,每16个字节一组,分成8组十六进制数,号称可以为全世界的每一粒沙子编上一个地址。

参考阅读【计算机网络的基本概念】:

端口号

一台计算机中往往运行着多个网络程序,IP地址只能确保把数据送到指定的计算机,但不能保证把这些数据传递给哪个网络程序。此时需要使用端口号加以区分。

【 协议+IP地址+端口号】

端口号用于表示把数据交给哪个网络程序处理,是一个16位的整数,范围0~65535。1024以下的端口号保留给预定义的服务,如:

|--21:FTP文件传输协议
|--23:Telnet 不安全的文本传送
|--25:SMTP(E-mail)
|--80:HTTP 超文本传送协议 (WWW)
|--110:POP3(E-mail)
开发时一般使用1024以上的端口号。

[查看端口被占用]:https://www.cnblogs.com/tigerlion/p/10664308.html

1648799-20190714002741174-949973631.png


InetAddress类

java.net.InetAddress类代表IP地址。

import java.net.*;public class _11InetAddressDemo {    public static void main(String[] args) throws UnknownHostException {        主机IP();        IP获取主机地址();        域名解析();        主机名获取地址();    }    static void 主机IP() throws UnknownHostException {        // 获得当前本地主机的IP地址        System.out.println("=====InetAddress.getLocalHost()=====");        InetAddress add1 = InetAddress.getLocalHost();        System.out.println("当前主机【toString()】" + add1.toString());        System.out.println("当前主机【getHostName()】" + add1.getHostName());        System.out.println("当前主机【getHostAddress()】" + add1.getHostAddress());        System.out.println("当前主机【getCanonicalHostName()】" + add1.getCanonicalHostName());    }    static void IP获取主机地址() throws UnknownHostException {        System.out.println("=====InetAddress.getByName(IP地址)=====");        String ip = "192.168.0.103";        String add3 = InetAddress.getByName(ip).getHostName();        System.out.println("IP地址为" + ip + "的主机【】" + add3.toString());    }    static void 域名解析() throws UnknownHostException {        System.out.println("=====InetAddress.getAllByName(DNS域名解析)=====");        String domainName = "www.baidu.com";        InetAddress[] add2 = InetAddress.getAllByName(domainName);        for (InetAddress ad : add2) {            System.out.println(domainName + "的IP是【】" + ad);        }    }    static void 主机名获取地址() throws UnknownHostException {        System.out.println("=====InetAddress.getAllByName(主机名)=====");        String hostName = "DESKTOP-B1RPLJP";        InetAddress[] add4 = InetAddress.getAllByName(hostName);        for (InetAddress ad : add4) {            System.out.println(hostName + "->【】" + ad);        }    }}

转载于:https://www.cnblogs.com/tigerlion/p/11182805.html

你可能感兴趣的文章
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
字典【Tire 模板】
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
Perl IO:IO重定向
查看>>
转:基于用户投票的排名算法系列
查看>>
WSDL 详解
查看>>
[转]ASP数组全集,多维数组和一维数组
查看>>
C# winform DataGridView 常见属性
查看>>
逻辑运算和while循环.
查看>>
Nhiberate (一)
查看>>
c#后台计算2个日期之间的天数差
查看>>
安卓开发中遇到的小问题
查看>>
ARTS打卡第3周
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>