Java网络编程

本文深入解析了网络数据传输流程,包括ARP和RARP协议、同一网段与不同网段的数据传输机制。同时介绍了HTTP协议及其工作原理,包括GET和POST的区别,以及HTTPS的安全性。此外,还探讨了TCP的三次握手和四次挥手,对比了TCP与UDP的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络编程:
网络模型和传输流程:
在这里插入图片描述
在这里插入图片描述
网络数据传输的流程:
在这里插入图片描述
ARP 协议是处于数据链路层与网络层之间的一种协议,也叫作地址解析协议。它将 IP 地址转换为 MAC 地址。
RARP 协议,就是 Reverse ARP,与 ARP 协议相同,是将 MAC 地址转换为 IP 地址的协议。
具体流程:
2. 同一网段的数据传输
假设在同一网段中的两台主机A和B想要通信,A如果想给B发送数据,必须先将B的IP地址与它的子网掩码做与运算得出B所在的网络号,A将所得的B的网络号和自己的做比较,以判断B和A是否在同一网段中,如果相同,则在同一网段,如果不同,则不在同一网段。如果A和B在同一网段,但是A没有B的IP地址所对应的MAC地址信息,则利用第二层广播形式发送ARP请求报文,在报文中包含了A(源主机)和B(目标主机)的IP地址信息。同一网段中的所有主机都可以收到并分析ARP报文,如果发现目标主机的IP地址和自己的不同,则丢弃报文,否则,就向A(源主机)发送ARP请求响应报文,报文的内容包括B(目标主机)的MAC地址。
为了减少广播量,网络设备通过ARP表在缓存中保存IP与MAC地址的映射信息。在一次 ARP的请求与响应过程中,通信双方都把对方的MAC地址与IP地址的对应关系保存在各自的ARP表中,以在后续的通信中使用。ARP表使用老化机制,删除在一段时间内没有使用过的IP与MAC地址的映射关系。
如果中间要经过交换机,交换机内部有一个数据库专门用来保存所有端口对应的网卡MAC地址。根据交换机的工作原理,它通过分析Ethernet包的包头信息(其中包含原MAC地址,目标MAC地址,信息的长度等),取得目标B的MAC地址后,查找交换机中存储的地址对照表(MAC地址对应的端口),确认具有此MAC地址的网卡连接在哪个端口上,然后将数据包发送到这个对应的端口,也就相应的发送到目标主机B上。
3. 不同网段的数据传输
在不同网段的数据传输中, 主机A并不需要获取远程主机C的MAC地址,而是将IP分组发给默认网关,由网关网络层完成转发过程。如果A(源主机)没有默认网关MAC地址的缓存记录,则它会通过ARP协议获取默认网关的MAC地址,因此在A的ARP表中只能观察到网关的MAC地址记录,而观察不到远程主机C的 MAC地址。
(1)A要发送数据包到C,如果A没有C的IP地址,则A首先要发出一个DNS请求,路由器B或者DNS域名解析服务器会给A回应PC的IP地址,这样A关于数据包网络层和传输层的IP地址信息就全了:源IP地址:A,目的IP地址:C。
(2)接下来A要知道如何到达C,A会发送一个ARP的地址解析请求,发送这个地址解析请求,不是为了获得目标主机C的MAC地址,而是把请求发送到了路由器B中,然后路由器B会将自己的MAC地址会发送给源主机A,这样A的数据包的数据链路层信息也全了,源MAC地址:A的MAC地址,目的MAC地址:路由器B的MAC地址。
(3)然后数据会到达交换机A,交换机A看到数据包的数据链路层的目的MAC地址,是去往路由器B的,就把数据包发送到路由器B,路由器B收到数据包,首先查看数据包的网络层目的IP地址,根据路由选择算法得到一张路由表,如果在自己的路由表中有去往C的路由,说明这是一个可路由的数据包。
(4)接下来就要进行路由传送了,首先,由路由器B对报文进行IP重组或分组,修改数据链路层的报头——将源MAC地址改为自己的,将目的MAC地址改为下一跳路由器C的MAC地址。将数据报传送给路由器C,路由器C重复路由器B的工作,直至到达目的主机C所在的网络,再利用局域网通信,找到相应的主机C。
(5)从路由器B到路由器C再到主机C的过程在一个庞大的网络系统中,在这个网络中还要封装一系列的协议,以完成数据的正确传输。
(6)如果在传输期间丢包或者到达主机C的数据包有错误,此时就需要发挥传输层TCP协议的作用了,对丢失的数据包进行重传。
总结:数据传输的过程在主机A(源主机)中,就是利用遵循的某种协议逐层为数据添加报头,添加报头是为了找到目的主机并如何将数据安全正确的传输到目的主机。
在目的主机中,就是自下向上逐层解报头过程,根据传输来的报头决定将数据交给上层的哪一个协议,并正确的将报头和数据单元分离开,接收到正确的数据。
HTTP(S):
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器作出反应,可以返回数据(响应)给客户端。默认80端口。
特点:
• HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
• HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
• HTTP是无状态(无记忆):HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
客户端发送请求:
格式:请求行(request line)、请求头部(header)、空行和请求数据。
在这里插入图片描述
服务器响应消息:
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
在这里插入图片描述
对于请求方法:
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
重点:GET和POST:
两种区别:
2. 从http报文来看:GET请求方式将请求信息放在URL后面,请求信息和URL之间以?隔开,请求信息的格式为键值对,请求信息直接暴露在URL中,而且长度限制,安全性较低。   POST请求方式将请求信息放置在报文体中,相获得请求信息必须解析报文,因此安全性较GET方式要高一些。没有长度限制(事实上要获得报文体中的请求信息也是很容易的,因此安全性上两者并没有太多的区别,具体解决传输过程中的安全性问题还要靠HTTPS)
3. GET请求能够被缓存。GET请求会保存在浏览器的浏览记录中。以GET请求的URL能够保存为浏览器书签,而POST方式都不具备上述功能。
常见的http状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在。
500 - 内部服务器错误。
HTTPS(http+ssl/tls): 安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
在这里插入图片描述
Http是直接与tcp通信的。而https在中间加入了ssl/tls。
SSL(安全套接字层): SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
TLS(传输层安全):其前身是 SSL,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。
http:采用明文传输信息,存在信息窃听,信息篡改,信息劫持的风险。
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议是一套加密传输的协议,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:
• 1)浏览器将自己支持的一套加密规则发送给网站。
• 2)网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
• 3)浏览器获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。

4)网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。

5)浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:
• 非对称加密算法:RSA,DSA/DSS
• 对称加密算法:AES,RC4,3DES
• HASH算法:MD5,SHA1,SHA256
HTTPS对应的通信时序图如下:
在这里插入图片描述

TCP
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议。

三次握手:
三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
在这里插入图片描述
第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
完成了三次握手,客户端和服务器端就可以开始传送数据。
四次挥手:
在这里插入图片描述
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

Tcp的报文格式:
在这里插入图片描述
在上述字段中,6位标志域的各个选项功能如下。

URG:紧急标志。紧急标志为"1"表明该位有效。

ACK:确认标志。表明确认编号栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。

PSH:推标志。该标志置位时,接收端不将该数据进行队列处理,而是尽可能快地将数据转由应用处理。在处理Telnet或rlogin等交互模式的连接时,该标志总是置位的。

RST:复位标志。用于复位相应的TCP连接。

SYN:同步标志。表明同步序列编号栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

FIN:结束标志。

UDP
特点:
(1)无连接的
发送数据之前不需要建立连接,减少了开销和发送数据之前的时延。
(2)尽最大努力交付
不保证可靠的交付,主机不需要维持复杂的链接状态表。
(3)面向报文的
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
(4)没有拥塞控制。
(5)支持一对一、多对一和多对多的交互通信。
(6)首部开销小,只有8个字节。
数据报的首部结构:
在这里插入图片描述

TCP和UDP区别

基本区别:
1.基于连接与无连接
2.TCP要求系统资源较多,UDP较少;
3.UDP程序结构较简单
4.流模式(TCP)与数据报模式(UDP);
5.TCP保证数据正确性,UDP可能丢包
6.TCP保证数据顺序,UDP不保证
  
UDP应用场景:
1.面向数据报方式
2.网络数据大多为短消息
3.拥有大量Client
4.对数据安全性无特殊要求
5.网络负担非常重,但对响应速度要求高

UDP和TCP编程步骤也有些不同,如下:

TCP:
TCP编程的服务器端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt(); * 可选
  3、绑定IP地址、端口等信息到socket上,用函数bind();
  4、开启监听,用函数listen();
  5、接收客户端上来的连接,用函数accept();
  6、收发数据,用函数send()和recv(),或者read()和write();
  7、关闭网络连接;
  8、关闭监听;

TCP编程的客户端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt();* 可选
  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
  4、设置要连接的对方的IP地址和端口等属性;
  5、连接服务器,用函数connect();
  6、收发数据,用函数send()和recv(),或者read()和write();
  7、关闭网络连接;

UDP:
与之对应的UDP编程步骤要简单许多,分别如下:
  UDP编程的服务器端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt();* 可选
  3、绑定IP地址、端口等信息到socket上,用函数bind();
  4、循环接收数据,用函数recvfrom();
  5、关闭网络连接;

UDP编程的客户端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt();* 可选
  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
  4、设置对方的IP地址和端口等属性;
  5、发送数据,用函数sendto();
  6、关闭网络连接;

TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。

UDP补充:
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,传输途中如果出现了丢包,UDO也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交给由采用UDO的应用程序去处理。换句话说,UDP将部分控制转移到应用程序去处理,自己却只提供作为传输层协议的最基本功能。UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。

TCP补充:
TCP充分实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保 证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
IP
外网IP是全世界唯一的IP地址,仅分配给一个网络设备。而内网IP是由路由器分配给每一部内部使用的IP地址,而内网的所有用户都是通过同一个外网IP地址进行上网的。
网络协议,唯一. ipv4 ipv6
Ipv4:32位 用的差不多了
Ipv6:128位 完全够
表示本机的三种方式:
1. 本机的ip
2. 127.0.0.1
3. localhost
可以通过ip访问访问其他服务器
服务器(房子)–》端口(门) 注意端口唯一和冲突。
Ipv4:
点分四组十进制。每一组范围是[0~255],如:255.255.255.255.
IPv6地址长度是128位,
由8块(或8个字段)组成,每一块都包含四个16进制数,每块由冒号分隔。
有以下特点:
1、一个块中前导的0不必书写。
2、全0的块可以省略,并用符号::代替。
3、IPv6可以兼容IPv4地址,即可以用IPv6格式表示IPv4地址。
分类寻址

IPV4被分为五大类:ABCDE
在这里插入图片描述
IP地址=网络地址+主机地址,比如:
在这里插入图片描述
计算机的IP地址由两部分组成,一部分为网络标识,一部分为主机标识,同一网段内的计算机网络部分相同,主机部分不同同时重复出现。路由器连接不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。通过设置网络地址和主机地址,在互相连接的整个网络中保证每台主机的IP地址不会互相重叠,即IP地址具有了唯一性。
计算子网掩码:
1. 判断是几类网络
2. 要划分几个子网

1、MAC地址
MAC(Media Access Control,介质访问控制)地址,或称为物理地址,也叫硬件地址,用来定义网络设备的位置,MAC地址是网卡出厂时设定的,是固定的(但可以通过在设备管理器中或注册表等方式修改,同一网段内的MAC地址必须唯一)。MAC地址采用十六进制数表示,长度是6个字节(48位),分为前24位和后24位。
1、前24位叫做组织唯一标志符(Organizationally Unique Identifier,即OUI),是由IEEE的注册管理机构给不同厂家分配的代码,区分了不同的厂家。
2、后24位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中MAC地址后24位是不同的。
MAC地址对应于OSI参考模型的第二层数据链路层,工作在数据链路层的交换机维护着计算机MAC地址和自身端口的数据库,交换机根据收到的数据帧中的“目的MAC地址”字段来转发数据帧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值