赞
踩
互联网中的信息交流,并不是简单的我将信息提交到互联网,然后你就收到信息。而是要通过一系列的复杂的过程。
这一切都是由网络协议来规定的。可以说,没有网络协议,就没有今天的互联网!
常见的网络协议:HTTP(HTTPS、SMTP、MQTT、RTPM等)针对不同的需求使用不同的协议
我们学习网络协议的意义:更多的去了解深网络协议层次的原理,从而更好的配合网络安全进行测试。
C/S开发环境 |
---|
服务器:java |
客服端:浏览器 |
抓包:浏览器、fiddler、wireshark
模拟工具:Xshell、packet tracer、GNS3
客服端和服务器的数据交互模型
java语言特性的说明(为什么环境要这样搭建):
C/C++和java的对比
C/C++代码的跨平台方式:跨平台原理是针对不同的平台编译成不同的格式。
例如
要在mac上运行就要将代码编译成mach-o格式
要在windows上面运行就要编译为PE格式
要在linux上运行就要编译成ELF格式
针对不同平台就要进行多次编译,使用平台相关的编译器生成对应平台的可执行文件。
java代码的跨平台方式:java只需要编译一次,将代码编译为自解码文件,对于操作系统来说不是直接的可执行文件。
在不用的系统上安装JVM(java virtual machine),由jvm软件去加载.class文件,翻译为机器指令。如果代码有错误会编译失败,就不会生成字节码文件。
特性:一次编译到处运行。
安装JDK就能够使用JVM
搭建jdk环境
安装jdk-8u241-windows-x64
取消安装公共JRE
更改安装路径为想要的路径
完成安装
配置环境变量
右键此电脑点击属性,找到高级系统设置
添加jdk的bin目录即可
配置JAVA_HOME
添加bin和jre\bin目录
最后解压tomcat到对应目录完成环境搭建
扩展:如何搭建两个jdk环境,并且实现方便的切换java在一台电脑上装两个或多个jdk如何配置环境变量,并实现jdk切换 - 我不吃鸡儿 - 博客园
端口号:相当于营业厅的办事窗口
各个端口去监听数据,运行不同的软件去处理不同的数据,这一类软件大致理解为服务器软件
当不同软件向服务器的同一个端口去发送数据的时候,这个时候就需要部署项目(部署不同的java项目)
在服务器端搭建环境,实现客服端和服务器端的通信
访问服务器软件
http://IP地址:端口号/项目
通过ip地址发现服务器、通过端口发现服务器软件、最后访问通过该端口通信的项目
访问本地搭建的tomcat
解压tomcat到指定目录,双击启动start.bat,访问http://127.0.0.1:8080
不同的网络协议内容,客服端和服务端的沟通是无法高效的,国际标准组织,制定标准比如统一的http协议使得通信变得更加便捷。
国际标准化组织ISO创建的OSI参考模型,具有七层结构
通过实践证明TCP/IP的4层协议才是实用的协议
请求过程
学习研究的过程中常把网络模型分为5层,下图展示了大致的请求过程,客户端将数据进行层层包装,然后通过介质如网线发送到服务器,服务器接收到数据包之后再经过层层的解包就得到发送的原始数据。服务器进行回包的时候亦是如此。
搭建JAVA服务器
创建一个空项目
设定项目位置
添加java模块
创建第一个模块 01_HelloWorld
创建一个java类,命名为 main.java
将代码链接web服务器的功能,需要添加web模块。
右键该项目,选择添加框架支持,选择web应 用程序,应用即可
服务器和客服端搭建到本地,访问的大致流程如下,客服端通过8080端口请求tomcat发送数据
将tomcat集成到idea中,添加本地tomcat服务器
在项目结构中添加tomcat依赖
java的类最好是要有包(层层文件夹包含),方便在不同的文件夹能够取相同的文件名。
创建一个处理登录请求的登录页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <form action="/hello/login" method="post"> <div>用户名<input name="username"></div> <div>密码<input name="password"></div> <button type="submit">登录</button> </form> </body> </html>
创建com.mj.servlet.LoginServlet处理登录请求
package com.mj.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/login") public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest requst, HttpServletResponse response) throws ServletException, IOException { doPost(requst,response); } @Override protected void doPost(HttpServletRequest requst, HttpServletResponse response) throws ServletException, IOException { //1.获取客服端请求发送的数据(请求参数) String username = requst.getParameter("username"); String password = requst.getParameter("password"); System.out.println(username + "_" + password); //2.判断 if("123".equals(username) && "456".equals(password)){ response.getWriter().write("Login Success"); } else{ response.getWriter().write("Login Falure"); } } }
计算机之前的通信基础
基础的通信需要知道对方的ip地址和网卡地址(MAC地址)
源ip地址------目标ip地址
源mac地址-----目标mac地址
确认了目标mac地址是自己才会将数据传递到上一层进行处理
实现两台电脑的连接方式,直接用两根网线进行连接
packet tracer演示
配置两台电脑通过ping和仿真的方式看是否能相互通信
ping测试
仿真测试
发广播的目的是获取对方的mac地址
arp数据包,目标mac地址为全F代表广播
相同设备使用的交叉线,不同设备之间使用紫铜线
同轴电缆---半双工通信、容易冲突、不安全、中间一断全都瘫痪
集线器(相当于同轴电缆升级版)
半双工、容易冲突、不安全、不智能
集线器广播时,会将数据包发送给连接到集线器的所有设备(hub没有智商、很傻)
如果当集线器连接了1000多台设备发送数据包的时候,就会长时间占用带宽,设备越多,效率越低。
网桥
能够得知每个接口那侧的mac的地址,起到隔绝冲突域的作用。就意味着左右两侧可以同时进行通信。
当网桥收录了一侧的mac地址后,当收到数据包的时候发现发送的数据包在同侧,就直接会在网桥处进行切断,不会再往网桥的另外一边进行转发。
交换机
全双工通信、相当于接口更多的网桥、比集线器安全
交换机能够记录好ip地址,直接将数据包发送到指定的计算机上面去。
如果全球的计算机的都连接到交换机上,ip地址是远远不够的,交换机连接的电脑属于同一个网段。在最开始交换机没有记录mac地址的时候,会发arp广播去询问mac地址,当每个主机都发送arp广播的话,大量的计算机同时广播会极大的占用带宽。广播风暴(就出问题了)
路由器(router)
实现在不同网段中转发数据
隔绝广播域
主机发送数据之前,首先会判断目标主机的ip地址跟它是否在同一个网段
在同一个网段:通过交换机、集线器等发送arp广播
不在同一个网段:通过路由器进行网段的判断,从而将数据发送到目标网段的网关接口
网关的设置
配置好路由器两边的网关设置,网关需要和同一边的局域网处于同一网段。
配置完成后打开该端口
配置每台计算机的默认网关,在哪一侧就使用哪一侧端口的网关
实现计算机2和计算机5之间的通信
1.通过网线直连、同轴电缆、集线器、网桥、交换机连接的设备在同一网段、同一广播域
2.网桥和交换机可以起到隔绝冲突域
每一个网卡都有一个6字节(48bit)的MAC地址(Media Access Control Address)
前3个字节OUI,组织唯一标识符,由IEEE的注册管理机构分配给厂商
后3个字节网络接口标识符,由厂商自行分配
不同厂商的oui标识查询: http://standards-oui.ieee.org/oui/oui.txt
不同设备MAC地址的表示方式
Windows 40-55-82-0A-8C-6D
Linux、Android、Mac、 IOS 40:55:82:0A:8C:6D
Packet Tracer 4055.820A.8C6D
当48位mac地址全为1时,代表广播地址 FF-FF-FF-FF-FF-FF
更改mac地址
可以尝试通过更改mac地址来欺骗交换机,达到能进校园网上网的功能
mac地址的获取
设备通过arp广播来获取到目标主机的mac地址
获取成功后会缓存IP地址、MAC地址的映射关系,俗称:ARP缓存
动态获取dynamic,保存期限为两分钟,两分钟后又要重新获取。
arp -a ip 查询arp缓存
arp -d ip 删除arp缓存
arp -d 所有保存的ip对应的mac
windows查询ip地址 ipconfig /all
互联网上每一个主机都有一个IP地址
字节层面上:将ip地址分为4个部分换算成10进制为192.168.1.10
ip地址的组成
网络标识(网络id)、主机标识(主机id)
子网掩码&IP地址得出网段(逐位相与)
IP地址:192.168.1.10
子网掩码:255.255.255.0
前三个部分 192.168.1 代表网络id
最后一个部分 0 代表主机id
已知ip地址需要结合子网掩码来判断网段、网络id和主机id
主机位全0表示一个网段,主机位为255.255表示广播,给这个网段所有的主机发送广播
所以实际可用的地址为256*256-2
ip地址的分类
D类地址和E类地址不会使用到主机上
A类地址
子网掩码为255.0.0.0
网络id部分不能为全0,127作为保留网段,所以网络位取值为:1~126
127.0.0.1为环回地址(Loopback),代表本机地址。
B类地址
子网掩码为255.255.0.0
最小网络位为128.0最大网络位为191.255
每一个网络位可容纳主机数为256*256-2,减掉了广播地址和网段地址
c类地址
子网掩码为255.255.255.0
最小网络位为192.0.0最大网络位为192.255.255
每一个网络位可容纳主机数为256-2,减掉了广播地址和网段地址
D类地址、E类地址
子网掩码
CIDR表示方法
192.168.1.100/24,代表子网掩码有24个1,即子网掩码为255.255.255.0
掩码、网段、可用ip广播等在线计算 在线网络计算器 | TCP/IP子网掩码计算换算 —在线工具
如果需要两百台主机在同一个网段内,可用分配一个C类网段,比如192.168.1.0/24
这样就有254个可用的ip地址为:192.168.1.1~192.168.1.254
多出了54个空闲的ip,不算浪费资源
将500台主机放在同一网段中,分配一个B网段,如191.100.0.0/16
共有65536-2个可用地址减去分配的500台剩下65034个ip没有使用造成了极大的资源浪费
等长、变长子网划分
合理进行子网划分避免浪费ip资源
等长子网划分
等分成2个子网
划分为2个子网段
A子网:192.168.0.0/25,子网掩码为255.255.255.128 能够容纳126个主机(00000000代表网段,01111111代表广播地址)192.168.0.1~192.168.0.126
B子网:192.168.0.128/25,子网掩码为255.255.255.128 能够容纳126台主机(10000000代表网段,11111111代表广播地址)192.168.0.129~192.168.0.254
划分为4个子网
划分为8个子网
A类子网和B类子网划分类似
变长子网划分
将子网地址块划分为原网段的1/2
不等长的子网,他们的子网掩码也不同
假设上图为192.168.0.0/24对上图进行子网划分得出的网段为:
子网划分实验
设置两台计算机,分配ip和子网掩码为子网划分后的网段
计算机0 ip为192.168.0.10,子网掩码为255.255.255.128
计算机1 ip为192.168.0.80,子网掩码为255.255.255.128
测试能够正常通信
设置计算机为192.128.0.129/25尝试是否能够通信,发现不能够进行通信,说明两台计算机不在同一个网段,
要使得两个网段能够通信需要在之间加一个路由器,首先进行广播获取mac地址,然后发送icmp报文成功实现通信。
子网划分器:子网划分工具--子网划分器
超网、静态路由
在计算两台计算机确认是否能够通信的时候是用的本机的子网掩码进行计算
超网
超网简介
超网就相当于跟子网反过来,将多个连续的网段合并成一个更大的网段。
比如针对一个C类地址将网络部分的一位划分到主机部分,主机位就变成了9个二进制位,得到的可用主机数量就翻倍。
将192.168.0.0/24和192.168.1.0/24合并为同一个网段为192.168.0.0/23
子网掩码向右边挪移位就是划分子网,规模变小,向左边挪就是扩展为超网,规模就变大。
思考192.168.0.255/23这个ip是否可以分配给计算机使用?
1、计算192.168.0.255/23这个ip地址的网段为192.168.0.0/23
2、去除主机号为全零的网段地址192.168.0.0/23
3、去除主机号为全1的广播地址192.168.1.255/23
所以可以被分配的ip为192.168.0.1/23~192.168.1.254
所以192.168.0.255/23这个ip地址可以被分配给计算机使用
子网合并及注意事项
将子网掩码向左移动两位,可以合并4个网段为1个网段。如以下的网段就合并为192.168.0.0/22
注意事项
要将两个网段进行合并,需要注意的是合并的网段必须是连续的,对于C端网络来说,当需要合并两个网段为一个网段的时候,只有当ip地址的第三部分的最后一位不相同,其他位相同的时候才能够进行合并。当需要合并4个网段为1个网段的时候需要ip地址第三部分的最后两位不同,其他位相同才能够进行合并。
合并网段的规律
子网掩码向左移动一位合并个2子网,向左移动两位合并4个子网,向左移动三位合并8个子网。
合并2个子网:
开头的网段的最后一位要能够被2整除
第一个网段的网络号以二进制0结尾,那么由它开始连续的2个网段就能够通过左移1位子网掩码进行合并
合并4个子网:
开头的网段的最后一位要能够被4整除
第一个网段的网络号以二进制00结尾,那么由它开始连续的4个网段就能够通过左移2位子网掩码进行合并
以此类推
第一个网段的网络号以二进制000结尾,那么由它开始连续的8个网段就能够通过左移3位子网掩码进行合并
判断一个网段是子网还是超网
根据默认的子网掩码判断网络位是否左移还是右移
例如:192.168.0.1/23就是一个C类超网
首先因为这个网段为C类地址,默认的子网掩码为24位,但是现在只有23位说明子网掩码向左移动了一位,主机位多了一个二进制数,此时为将子网合并为一个大的网络,所以此时是合并为了一个C类超网。
练习1--实现4台主机之间相互通信
分析 4个区域的计算机和路由器的对应的网关网关处于同一网段
(使得所有机算计能够互相通信)
配置路由器和交换机为以下的参数
测试计算机0和计算机1是否能够通信
实现通信
测试计算机2和计算机3是否能够通信
实现通信
测试计算机0和计算机3是否能够通信
测试无法通信,路由器返回信息无法到达目的地址(路由器无法找到这个网段的位置)
默认情况下,路由器只知道跟它直连的网段,非直连的网段需要通过静态路由、动态路由告诉它
配置静态路由使得路由器两边的网段能够进行通信
配置静态
配置网络和掩码为目标网段,配置下一跳为要传输数据的下一个路由器接口地址
配置serial2/0
配置ip和子网掩码确保两个路由器连接的接口为同一网段
参照路由器0的配置,路由器1的配置原理相同
查看路由器0的路由表
可以观察到在设备中的配置本质就是在执行命令行界面的这些命令
补充
配置特定的ip地址
在静态路由的配置中如果需要配置特定的ip地址,需要将掩码改为255.255.255.255
配置一个静态路由使得能够同时访问
配置静态路由网段为192.168.0.0使用计算机4访问计算机0成功实现访问
配置默认路由
不知道访问的地址是怎么走的设置网络和掩码为0.0.0.0,设置默认的下一跳,这样就设置为了默认路由。
优先配置连接路由器少的区域
练习
为了能够实现通过路由器访问的没有通过路由器直连并且没有在同一网段的计算机,配置所有路由和计算机使得所有的电脑能够相互通信。
根据图中所示配置了以下内容
1.各台计算机的ip地址、子网掩码和网关地址
2.路由器与计算机相连接的端口ip(FastEthernet0/0)、路由器之间相互连接的ip地址(Serial2/0)
3.配置的各台路由器中的静态路由
静态路由的配置如下,为了实现配置的方便、更能够方便的查找,直接使用了默认路由设置,使得各个计算机在想与目的计算机通信的时候能够自动的寻找目的ip
路由表参考答案
路由设置思路:配置静态路由的时候边缘路由器可以直接配置为默认路由,但是在中间的路由器左右都连接了设备的情况下,在设备少的一边可以配置固定ip,在设备多的一边就配置为默认路由,如下图所示,路由器0和3位边缘路由,路由器1和2为连接了两个设备的中间路由。
上图所示,在数据包的传输过程中源ip和目标ip是不会变化的,但是源MAC和目标MAC是会随着数据包的传输而发生改变
网络(Network)互联网(internet)因特网(Internet)
ISP(Internet Service Provider)
中国的internet服务提供商,移动,电信,网通,铁通等
家庭的宽带都是通过ISP连接到Internet的
为什么在一些网站中会存在不同isp的下载地址?
因为有不同的运营商提供的机房下载时通过自己网络类型进行选择会一定的提高下载的速度
网络分类
局域网(LAN)
一般是范围几百米到几十公里内的计算机所构成的计算机网络
常用于公司、家庭、学校、医院、机关、一栋大楼
局域网使用广泛的网络技术:以太网
在电脑和手机上的WLAN(Wireless LAN),无线局域网
城域网(MAN)
一般范围是数十公里到数百公里,可以覆盖一个城市
广域网(WAN)
一般范围是几百公里到几千公里,可以覆盖一个国家。通常需要租用ISP的线路
分布较为广泛的分公司可以租用ISP的线路进行网络的构建,实现公司之前的通信。
FastEthernet 快速以太网接口(100M)
GigabitEthernet 千兆以太网接口(1000M)
Serial 串行接口(一般是在路由器上面)
电话线入户
光纤入户
网线入户
家用无线路由器的逻辑结构
ip地址分为公网的ip和私网的ip
公网ip
Internet上的路由器中只有到达公网的路由器,没有到达私网的路由器表
公网IP由因特网信息中心(NIC)统一分配和管理
ISP需要向Inter NIC申请公网ip
私网ip
主要用于局域网。
保留的私网网段
internet上的设备是无法知道私网地址的
NAT(Network Address Translation)
客户端172.18.250.6和百度服务器202.108.22.5通信,172.18.250.6发送数据时,先转换为219.155.6.240:1723(任意>1024的随机端口),然后再利用这个身份发送数据给百度服务器,然后百度服务器回应数据并发送给219.155.6.240:1723,NAT网关检查自己的关联表,意识到这是自己地私网中172.18.250.6的数据包,然后把这个数据发送给客户端
将私网网段中的设备ip转换为公网的ip地址,使得不同私网中的相同ip虽然有冲突但是也能够相互通信
NAT的特点
可以节约公网IP资源,会隐藏内部真实的IP
NAT的分类
静态转换
手动配置NAT映射表,一对一转换
动态转换
定义外部地址池,动态随机转换吗,一对一转换
以上两种方式都无法起到节约ip地址的目的,因为私网ip地址还是单独对应了一个公网ip地址
PAT(Port Address Translation)
多对一转换,最大程度节约了ip资源
采用端口多路复用方式,通过端口号标识不同的数据流
例如:通过对不同的ip地址进行端口标识,最终汇聚到同一个ip地址
192.168.1.10:23123->200.0.0.10:23123
192.168.1.11:7676->200.0.0.10:7676
192.168.1.12:7676->200.0.0.10:64565
PAT是目前应用最广泛的NAT实现方式
为什么在第一个包的请求中数据会丢失?
当计算机4 ping 计算机5的时候第一个数据包发生了丢失
是因为在最开始需要找到目标ip的时候需要用到发送arp广播知道对方的广播,这之前,在发送第一个数据包的时候数据包到了路由器3,路由器3是发现这个ICMP包不是给自己的,自己也不知道这个包的接收者在哪儿,由于忙碌,就直接将icmp包丢了,然后路由器再转发arp包询问计算机6的mac地址最后知道地址后再进行icmp包的转发。
路由器是否可以连接同一个网段呢?
是可以的,区别在于不同的路由器,部分路由器型号是支持连接同一网段的网络的。
可以看到819HG-4G-IOX路由器的快速以太网口是不用设置IP地址和子网掩码的,相当于实现了交换机的功能,是可以连接同一网段的计算机的。
OSI参考模型,具有7层结构,但是实际运用中更多用到的是4层的TCP/IP协议,但这里我们分为5层对相关知识进行讨论。
在请求过程中,客户端的数据包首先通过应用层进入其他层,进行层层打包,然后传输到服务器再经过层层的解包才得到原始的数据,每一层添加的数据都是必要且有用的,缺少了任何一层的功能都无法完成数据的传输。
物理层
比特流 Bits
物理层定义了接口标准、线缆标准、传输速率、传输方式等
数字信号和模拟信号
数据通信模型
信道
信息传输的通道,一条传输介质上(比如网线)可以有多条信道
信道上可以传输不同的信息
1.单工通信
信号只能够想一个方向传输,任何时候都不能够改变信号的方向
比如无线电广播和有线电视
2.半双工通信
信号可以双向传输,但是只能交替进行,同一时间只能想一个方向传输
比如对讲机
3.全双工通信
信号可以同时双向传输
比如手机
数据链路层
(帧Frames)
链路:从一个节点到相邻节点的一段物理线路(有线或者无线),中间没有其他交换节点,集线器是咩有智商的,集线器穿插到链路中间时候,两边的线路还是算同一条链路。相当于忽略掉中间的集线器。
封装成帧
以太网理解为CSMA/CD协议,MTU限制为1500个字节
每一个帧都有帧开始符和帧结束符,区别不同的帧的开始和结束。
透明传输
数据部分一旦出现了SOH、EOT,就需要进行转义
在传输的过程中加上ESC数据包,在接收的一旦发现有跟上ESC的时候就直接去掉ESC
差错检验
在信道的传输过程中数据可能会失真,通过差错检验可以大概率保证数据的正确。
FCS=(帧的数据部分+数据链路层首部)的校验
通过计算帧的数据部分和数据链路层首部得到FCS,通过核验FCS查验数据是否有错误
当检验数据时候发生错误,会将错误的数据丢弃。
在不同的链路的传输中会除去之前的首部和尾部加上另外链路特有的首部和尾部。
CSMA/CD协议
载波监听多路访问/冲突检测
冲突检测:判断收到的数据是被弹回的数据还是其他设备发送的数据。
一般集线器会使用到这个协议,称使用了CSMA/CD的网络可以称为以太网,传输的为以太网帧
以太网帧格式:Ethernet V2标准 IEEE802.3标准,最多使用Ethernet V2标准
为了检测正在发送的帧是否发生了冲突,以太网的帧至少需要64字节(理论上计算出来了为64字节,两倍的通道长度)
当发送的帧足够长的时候,当帧还在发送的时候发生了碰撞收到了自己发送的帧头的时候(同时检测到了头部和尾部),就能够判定为发生了冲突,一般要求发送的帧为信道的两倍长,理论上就是64字节。
交换机虽然不需要使用CSMA/CD协议了,但是传输的帧依然是以太网帧,所以用交换就组建的网络依然可以叫做以太网。
Ethernet V2帧
使用了曼彻斯特编码就不需要使用帧开始符和帧结束符了
以太网帧:首部+数据+FCS
首部:源MAC+目标MAC+网络类型
类型:使用的是ipv4网络还是ipv6网络
数据:数据部分至少需要46字节
标准
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。