文章目录
1. 概述
-
网络编程:使用套接字(socket)来达到进程间通信,现在一般称为TCP/IP编程。
-
套接字(socket):网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
-
套接字原理机制:
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。 -
网络编程三要素:①IP地址:InetAddress: 网络中设备的标识,不易记忆,可用主机名;②端口号: 用于标识进程的逻辑地址,不同进程的标识;③传输协议: 通讯的规则常见协议:TCP,UDP。
-
IP地址分类
A类:1.0.0.1—127.255.255.254
(1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址)
(2)127.X.X.X是保留地址,用做循环测试用的。
B类:128.0.0.1—191.255.255.254 172.16.0.0—172.31.255.255是私有地址。
C类:192.0.0.1—223.255.255.254 192.168.X.X是私有地址
D类: 224.0.0.1—239.255.255.254
E类: 240.0.0.1—247.255.255.254 -
参考模型:
2. InetAddress类
-
表示互联网协议 (IP) 地址,方便我们对IP地址的获取和操作。
-
InetAddress.getByName(String host) //在给定主机名的情况下获取主机的IP地址
-
inetAddress.getHostAddress() //获取IP
-
inetAddress.getHostName() //获取主机名
-
实例:
-
运行结果:
3. 端口
- 端口表示计算机上的一个程序的进程;端口的表示是一个16位的二进制数,2个字节,对应十进制的0~65535;单个协议下,端口号不能冲突,多个协议下,端口号可以相同;
- 分类:公有端口:0~1023
程序注册端口:1024~49151,用户分配或者程序
动态、私有:49152~65535 - 实例:
- 运行结果:
4. TCP协议
- TCP协议:传输控制协议,是可靠连接,类似于打电话,只有等待对方接通的时候才可以交流,也就是确认了对方可以传信息,才会发送信息,三次握手,四次挥手,但是传输速度慢;
4.1 传输消息
-
实例:
客户端:
服务器:
-
运行结果:
4.2 文件上传
- 实例:
客户端:
服务端:
- 运行结果:
5. UDP协议
- UDP协议:用户数据报协议,是不可靠的,就像发短信,发出去就完事了,对方是否接收到就与自己无关,但是传输速度快;
- 实例:
用户端:
服务器:
- 运行结果:
6. TCP与UDP区别
- TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,是专门为了在不可靠的网络中提供一个可靠的端对端字节流而设计的,面向字节流。
- UDP(用户数据报协议)是iso参考模型中一种无连接的传输层协议,提供简单不可靠的非连接传输层服务,面向报文。
区别:
1) TCP是面向连接的,可靠性高;UDP是基于非连接的,可靠性低;
2) 由于TCP是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差,同时过程复杂,也使其易于攻击;UDP没有建立连接的过程,因而实时性较强,也稍安全;
3) 在传输相同大小的数据时,TCP首部开销20字节;UDP首部开销8字节,TCP报头比UDP复杂,故实际包含的用户数据较少。TCP在IP协议的基础上添加了序号机制、确认机制、超时重传机制等,保证了传输的可靠性,不会出现丢包或乱序,而UDP有丢包,故TCP开销大,UDP开销较小;
4) 每条TCP连接只能时点到点的;UDP支持一对一、一对多、多对一、多对多的交互通信。
应用场景选择:
- 对实时性要求高和高速传输的场合下使用UDP;
- 在可靠性要求低,追求效率的情况下使用UDP;
- 需要传输大量数据且对可靠性要求高的情况下使用TCP。
7. URL
- 统一资源定位符:定位资源的,定位互联网上的某一个资源
- 实例
8. 下载资源
- 代码:
9. 协议相关面试题
(1)讲一下浏览器从接收到一个 URL 到最后展示出页面,经历了哪些过程。
1、DNS 解析
2、TCP 连接
3、发送 HTTP 请求
4、服务器处理请求并返回 HTTP 报文
5、浏览器解析渲染页面
(2)http 和 https 的区别
1、连接的端口不一样,http 是 80,https 是 443
2、http 连接很简单,没有状态; https 是 ssl 加密的传输,身份认证的网络协议,相对 http 传输比较安全