前言
这是一个信息化的时代,在生活中,网络通信无处不在。比如发送短信,邮件,视频通话等。
以邮件为例子:
① 收件人: 相当于网络编程的ip地址+端口号,定位到某一个具体的地方!只有找对地方才可以成功发送对吧?
②内容: 相当于网络编程中的数据包。也就是具体发送的内容。
③内容语言: 相当于是网络协议,比方说我发个英语写的内容给你,不懂英语的人也看不懂内容。双方约定好的格式,就是协议,你懂我懂大家都懂!
④发送人: 证明是谁发送的,跟收件人是相对的~
一、IP
①ip地址:inetAddress
公网: 一般如果是 大网IP 的话,你的ip地址肯定是唯一的!
例如我的百度云服务器地址:
局域网内: 一般每个局域网都有自己的子网IP,就是一段连续的IP地址,可以由网络管理员手工配置。一般都是192.168.×.× 这个格式的,主要还是看分配,只要不重复即可~
②ip的分类:
- ipv4/ipv6
-
IPV4: 127.0.0.1,四个字节组成。0 ~ 255, 42亿~;30亿都在北美,亚洲4亿。2001年就用尽了;
-
IPV6: fe80::755f:fc6c:2ebc:b6e6%18,128位。8个无符号整数!
这里显示不全,大概规则是:
-
2001:0bb2:aaaa:0015:0000:0000:1aaa:1312
有兴趣的可以去这篇文章看看哦:点击跳转
- ABCD类网址:
看上面的图应该就明白了,图画的丑,见谅~
③域名:
域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。以上摘自百度百科
通俗的讲就是:ip地址不好记呀!好的域名大家瞄一眼就记住了呀!
比如:www.baidu.com
要知道一个好的渔民可是比北上广的房子还要贵哦,我要是能穿越回去二十年钱,我就把阿里巴巴京东啥的域名全部注册一遍,哈哈,发财了白日梦!
④java中获取ip地址:
InetAddress:类的主要作用是封装IP及DNS,因为这个类没有构造器,所以我们要用他的一些方法来获得对象。
public class Test01 {
public static void main(String[] args) throws UnknownHostException {
//使用InetAddress来获取
InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
System.out.println("inetAddress:"+inetAddress);
//localhost和127.0.0.1是一样的
InetAddress inetAddress1 = InetAddress.getByName("localhost");
System.out.println("inetAddress1:"+inetAddress1);
//getLocalHost方法获取本机ip地址
InetAddress inetAddress2 = InetAddress.getLocalHost();
System.out.println("inetAddress2:"+inetAddress2);
//查询网站ip地址,这个稍微慢点,因为需要链接
InetAddress inetAddress3 = InetAddress.getByName("www.baidu.com");
System.out.println("inetAddress3:"+inetAddress3);
//常用方法
System.out.println(inetAddress.getCanonicalHostName());//规范的名字
System.out.println(inetAddress.getHostAddress()); //ip
System.out.println(inetAddress.getHostName()); //域名,或者自己电脑的名字
}
}
执行结果如下:
二、port(端口号)
端口表示一个计算机上面的一个进程,每个进程都有一个自己的端口号。
- 不同的进程有不同的端口号,用来区分进程!
- 被规定0 ~ 065535
- 不同协议可以一样。TCP,UDP:65535 * 2 ,单个协议下,端口号不能冲突
- 端口分类
- 公有端口0 ~ 1023
- HTTP:80
- HTTPS:443
- FTP:21
- Telent:23
- 程序注册端口:1024 ~ 49151,分配给用户或者程序
- Tomcat:8080
- MySQL:3306
- Oracle:1512
- 动态、私有:49152 ~ 65535
代码示例:
InetSocketAddress类主要作用是封装端口 他是在在InetAddress基础上加端口,但它是有构造器的。具体的一些方法可以去帮助文档查看。
public class Test02 {
public static void main(String[] args) {
InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1",8080);
System.out.println(socketAddress);
//常用方法
System.out.println(socketAddress.getAddress());
System.out.println(socketAddress.getHostName());
System.out.println(socketAddress.getPort());
}
}
执行结果如下:
三、通信协议
协议=约定
网络通信协议: 速率,传输码率,传输控制……
TCP/IP协议簇:实际上是一组协议,看图说话:
TCP/UDP区别:
- TCP:用户传输协议
- 打电话
- 三次握手 四次挥手
- 客户端、服务端
- 传输完成,释放连接,效率低
- UDP:用户数据报协议
- 不连接,不稳定
- 客户端、服务端:没有明确的界限,两者可以随意变换
- 不管有没有准备好,都可以发给你…你要不要,不要你说了算,我想给你必须要,丢不丢也不关我的事儿哦~
- DDOS:洪水攻击!(饱和攻击)
上面的为啥叫TCP/IP协议簇?因为这两货最出名。。。。
重点: 三次握手,四次挥手如何理解:
老规矩,对比可以让我们加深理解,先看官方解释:
-
官方解释:
- 三次握手
- 四次挥手:
说实话我看着头也疼。
- 三次握手
-
大大丁大大理解版本:
-
三次握手:
最少需要三次,保证稳定连接!
①A:你瞅啥?
②B:瞅你咋地?
③A:干一场! -
四次挥手
情人节版本:
①A:分手吧!
②B:真的要分手吗?
③B:(确认一次)真的真的要分手吗?
④A:分手!
-
Java注解和反射扩展:Java网络编程学习汇总
路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧**转载请注明出处哦**