柚子快報(bào)邀請(qǐng)碼778899分享:【1】網(wǎng)絡(luò)協(xié)議基礎(chǔ)概念
柚子快報(bào)邀請(qǐng)碼778899分享:【1】網(wǎng)絡(luò)協(xié)議基礎(chǔ)概念
【1】網(wǎng)絡(luò)協(xié)議基礎(chǔ)知識(shí)
1、互聯(lián)網(wǎng)2、為什么要學(xué)習(xí)網(wǎng)絡(luò)協(xié)議3、學(xué)習(xí)中需要搭建的環(huán)境4、客戶端-服務(wù)器5、Java 的跨平臺(tái)原理6、C/C++的跨平臺(tái)原理7、一個(gè)簡(jiǎn)單的SpringBoot項(xiàng)目(1) pom.xml(2) application.yml(3) NetworkStudyApp.java(4) SwaggerConfig.java(5) HelloWorldController.java
8、什么是協(xié)議9、網(wǎng)絡(luò)互連模型10、客戶端傳數(shù)據(jù)到服務(wù)器端11、網(wǎng)絡(luò)分層12、計(jì)算機(jī)之間的通信基礎(chǔ)13、計(jì)算機(jī)之間的連接方式(1) 網(wǎng)線直連① 使用交叉線連接兩臺(tái)計(jì)算機(jī)② 設(shè)置兩臺(tái)計(jì)算機(jī)的IP地址③ ping 測(cè)試是否連通④ 使用仿真發(fā)數(shù)據(jù)包測(cè)試是否連通⑤ ARP 廣播協(xié)議
(2) 同軸電纜(Coaxial)(3) 集線器(Hub)① 三臺(tái)計(jì)算機(jī),一臺(tái)集線器② 計(jì)算機(jī)1向計(jì)算機(jī)2發(fā)數(shù)據(jù)③ 集線器“沒有智商”
(4) 網(wǎng)橋(Bridge)① 設(shè)備搭建② 計(jì)算機(jī)1給計(jì)算機(jī)0發(fā)數(shù)據(jù)
(5) 交換機(jī)(Switch)① 設(shè)備搭建② 計(jì)算機(jī)1給計(jì)算機(jī)0發(fā)數(shù)據(jù)
(6) 路由器(Router)① 網(wǎng)橋、交換機(jī)等連接的設(shè)備必須在同一網(wǎng)段② 交換機(jī)跨網(wǎng)段傳輸數(shù)據(jù)? 【A】搭建設(shè)備? 【B】設(shè)置網(wǎng)關(guān)的IP地址和設(shè)備的網(wǎng)關(guān)地址?【C】傳輸數(shù)據(jù)
1、互聯(lián)網(wǎng)
? 互聯(lián)網(wǎng)的出現(xiàn),徹底改變了人們的生活方式,足不出戶就可以購物、聊天、看電影、買車票、上班等
? 思考:數(shù)據(jù)是如何從一個(gè)設(shè)備傳遞到另一個(gè)設(shè)備的? ? 這一切都是由網(wǎng)絡(luò)協(xié)議來規(guī)定的。沒有網(wǎng)絡(luò)協(xié)議,就沒有今天的互聯(lián)網(wǎng)。
2、為什么要學(xué)習(xí)網(wǎng)絡(luò)協(xié)議
? 互聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng),都離不開網(wǎng)絡(luò)協(xié)議 ? 最熟悉的網(wǎng)絡(luò)協(xié)議:HTTP ? 為了滿足各種需求,產(chǎn)生了各式各樣的網(wǎng)絡(luò)協(xié)議(HTTPS、SMTP、MQTT、RTMP 等) ? 不同的網(wǎng)絡(luò)協(xié)議有不同的應(yīng)用場(chǎng)景
? HTTP:HyperText Transfer Protocol:超文本傳輸協(xié)議
? 隨著物聯(lián)網(wǎng)、音視頻、直播等領(lǐng)域的發(fā)展,企業(yè)提高對(duì)開發(fā)人員網(wǎng)絡(luò)基本功的要求,經(jīng)常問網(wǎng)絡(luò)協(xié)議的面試題 ? TCP和UDP的區(qū)別?說一下它們的報(bào)文格式? ? TCP的流量控制和和擁塞控制?TCP如何實(shí)現(xiàn)可靠性傳輸? ? 為什么連接是3次握手,關(guān)閉是4次揮手? ? 7層模型與4層模型的區(qū)別?每一層的作用是什么? ? 交換機(jī)與路由器的區(qū)別? ? …
3、學(xué)習(xí)中需要搭建的環(huán)境
? 客戶端-服務(wù)器開發(fā)環(huán)境 ? 客戶端:瀏覽器(HTML+CSS+JS) ? 服務(wù)器:Java
? 網(wǎng)絡(luò)抓包 ? 瀏覽器(Chrome、Firefox) ? 抓包工具(Fiddler、Wireshark)
? 模擬環(huán)境 ? xshell、packet-tracer、gns3
4、客戶端-服務(wù)器
? 服務(wù)器軟件(Tomcat)監(jiān)聽端口,端口(如 5200)和某個(gè)項(xiàng)目綁定 ? 客戶端通過端口和指定的項(xiàng)目交互
5、Java 的跨平臺(tái)原理
? JVM(Java Virtual Machine):Java 虛擬機(jī) ? Java 的跨平臺(tái):一次編譯,到處運(yùn)行 ? 編譯生成跟平臺(tái)無關(guān)的字節(jié)碼文件(class 文件) ? 由對(duì)應(yīng)平臺(tái)的 JVM 把字節(jié)碼解析為機(jī)器指令(010101) ? 如果代碼有語法錯(cuò)誤,將編譯失敗,就不會(huì)生成字節(jié)碼文件 ? 那就不會(huì)去運(yùn)行一個(gè) JVM 程序。最后導(dǎo)致 Java 程序運(yùn)行失敗
6、C/C++的跨平臺(tái)原理
? 使用平臺(tái)相關(guān)的編譯器生成對(duì)應(yīng)平臺(tái)的可執(zhí)行文件
? JS 是解釋型語言,由對(duì)應(yīng)平臺(tái)的瀏覽器執(zhí)行JS代碼
7、一個(gè)簡(jiǎn)單的SpringBoot項(xiàng)目
(1) pom.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
(2) application.yml
server:
port: 5200
spring:
mvc:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
springfox:
documentation:
enabled: true # 是否啟用Swagger功能
open-api:
enabled: true # 是否啟用Swagger的open-api
swagger-ui:
enabled: true # 是否啟用Swagger的WebUI
(3) NetworkStudyApp.java
@SpringBootApplication
public class NetworkStudyApp {
public static void main(String[] args) {
SpringApplication.run(NetworkStudyApp.class, args);
System.out.println("服務(wù)啟動(dòng)成功?");
System.out.println("?Swagger地址:http://localhost:5200/swagger-ui/index.html");
}
}
(4) SwaggerConfig.java
@Configuration
public class SwaggerConfig {
@Bean
public Docket docket(Environment env) {
return new Docket(DocumentationType.SWAGGER_2)
.ignoredParameterTypes(HttpSession.class,
HttpServletResponse.class,
HttpServletRequest.class) // 忽略參數(shù)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("學(xué)習(xí)網(wǎng)絡(luò)")
.description("原萬事順心")
.contact(new Contact("張國(guó)慶", null, "3465764450@qq.com"))
.version("1.0")
.build();
}
}
(5) HelloWorldController.java
@Api(tags = "網(wǎng)絡(luò)協(xié)議學(xué)習(xí)")
@RestController
@RequestMapping("/hello/world")
public class HelloWorldController {
@ApiOperation(value = "模擬登錄", notes = "模擬登錄")
@PostMapping("/login")
@ApiImplicitParams({
@ApiImplicitParam(name = "username", value = "用戶名"),
@ApiImplicitParam(name = "password", value = "密碼")
})
public String login(@RequestParam(defaultValue = "張思睿") String username,
@RequestParam(defaultValue = "zgq666") String password) {
if ("張思睿".equals(username) && "zgq666".equals(password))
return "張思睿 登錄成功?";
return username + " 登錄失敗?";
}
}
8、什么是協(xié)議
? 協(xié)議是一個(gè)約定 ? 網(wǎng)絡(luò)協(xié)議約定客戶端可以發(fā)什么數(shù)據(jù)到服務(wù)器,服務(wù)器可以返回什么數(shù)據(jù)到客戶端,約定數(shù)據(jù)格式等
9、網(wǎng)絡(luò)互連模型
? 為了更好地促進(jìn)互聯(lián)網(wǎng)絡(luò)的研究和發(fā)展,國(guó)際標(biāo)準(zhǔn)化組織 ISO 在 1985 年制定了網(wǎng)絡(luò)互連模型 ? OSI 參考模型(Open System Interconnect Reference Model),具有 7 層結(jié)構(gòu)【國(guó)際標(biāo)準(zhǔn)】
10、客戶端傳數(shù)據(jù)到服務(wù)器端
11、網(wǎng)絡(luò)分層
12、計(jì)算機(jī)之間的通信基礎(chǔ)
? 需要得知對(duì)方的 IP 地址 ? 最終是根據(jù) MAC 地址(網(wǎng)卡地址)輸送數(shù)據(jù)到網(wǎng)卡,被網(wǎng)卡接收 ? 如果網(wǎng)卡發(fā)現(xiàn)數(shù)據(jù)的目標(biāo) MAC 地址是自己,就會(huì)將數(shù)據(jù)傳遞給上一層進(jìn)行處理 ? 如果網(wǎng)卡發(fā)現(xiàn)數(shù)據(jù)的目標(biāo) MAC 地址不是自己,就會(huì)將數(shù)據(jù)丟棄,不會(huì)傳遞給上一層進(jìn)行處理
13、計(jì)算機(jī)之間的連接方式
(1) 網(wǎng)線直連
? 通過交叉線連接(不是直通線)
? 使用思科模擬器(Cisco Packet Tracer)模擬
① 使用交叉線連接兩臺(tái)計(jì)算機(jī)
② 設(shè)置兩臺(tái)計(jì)算機(jī)的IP地址
③ ping 測(cè)試是否連通
④ 使用仿真發(fā)數(shù)據(jù)包測(cè)試是否連通
⑤ ARP 廣播協(xié)議
? ARP 協(xié)議是廣播 ? 廣播只在同一網(wǎng)段進(jìn)行 ? 廣播的目標(biāo)MAC地址是 FFFF.FFFF.FFFF,表示同一網(wǎng)段的設(shè)備的網(wǎng)卡都會(huì)收到廣播信息 ? ARP 是有緩存的
(2) 同軸電纜(Coaxial)
? 多臺(tái)計(jì)算機(jī)互聯(lián)
? 半雙工通信( 同一時(shí)間只能一個(gè)設(shè)備向另一個(gè)設(shè)備發(fā)數(shù)據(jù) )全雙工通信:同一時(shí)間,A設(shè)備可以向B設(shè)備發(fā)數(shù)據(jù),B設(shè)備也可以向A設(shè)備發(fā)數(shù)據(jù) ? 容易沖突 ? 不安全 ? 中間斷了,則整個(gè)癱瘓 ? 同軸電纜"沒有智商"(會(huì)向所有的設(shè)備發(fā)廣播)
(3) 集線器(Hub)
? 半雙工通信 ? 容易沖突 ? 不安全 ? 根同軸電纜一樣:沒有智商(會(huì)向所有的設(shè)備發(fā)廣播)
? 使用思科模擬器(Cisco Packet Tracer)模擬
① 三臺(tái)計(jì)算機(jī),一臺(tái)集線器
② 計(jì)算機(jī)1向計(jì)算機(jī)2發(fā)數(shù)據(jù)
③ 集線器“沒有智商”
(4) 網(wǎng)橋(Bridge)
? 能夠通過自學(xué)習(xí)得知每個(gè)接口那側(cè)的 MAC 地址 ? 從而起到隔絕沖突域的作用
? MAC地址表
網(wǎng)橋端口MAC地址LEFT計(jì)算機(jī)6的MAC地址RIGHT計(jì)算機(jī)2的MAC地址LEFT計(jì)算機(jī)7的MAC地址
? 當(dāng)網(wǎng)橋完全知道其每個(gè)端口那側(cè)的所有設(shè)備的MAC地址的時(shí)候,每個(gè)接口那側(cè)就是一個(gè)沖突域 ? 當(dāng)網(wǎng)橋知道目標(biāo)地址是在接口的某一側(cè)(如 LEFT)的時(shí)候,網(wǎng)橋就不會(huì)把數(shù)據(jù)發(fā)到 RIGHT ? 不同的沖突域的設(shè)備之間可以同時(shí)發(fā)數(shù)據(jù) ? 網(wǎng)橋只有2個(gè)接口,只能隔絕2個(gè)沖突域 ? 同一沖突域內(nèi)若有很多設(shè)備的話,這些設(shè)備之間是半雙工通信
? 思科模擬器測(cè)試
① 設(shè)備搭建
② 計(jì)算機(jī)1給計(jì)算機(jī)0發(fā)數(shù)據(jù)
? 計(jì)算機(jī)1發(fā)包給集線器0,集線器"沒有智商",會(huì)把包廣播給計(jì)算機(jī)0和網(wǎng)橋0
? 網(wǎng)橋已經(jīng)記錄了計(jì)算0和計(jì)算1的MAC地址,若計(jì)算機(jī)0和計(jì)算機(jī)1再次互相發(fā)包,網(wǎng)橋不會(huì)把包發(fā)給它右側(cè)端口的設(shè)備
(5) 交換機(jī)(Switch)
? 相當(dāng)于接口更多的網(wǎng)橋 ? 全雙工通信 ? 比集線器安全(集線器”沒有智商",數(shù)據(jù)包會(huì)到處發(fā)) ? 接口多(直接連設(shè)備,無需集線器)
? 思考:全球所有的設(shè)備都用交換機(jī)連接會(huì)是什么情況? ?全球的設(shè)備都必須在同一個(gè)網(wǎng)段,進(jìn)而IP地址不夠用(交換機(jī)連接的設(shè)備必須在同一網(wǎng)段) ?第一次ARP廣播獲得MAC地址的時(shí)候會(huì)廣播給全球所有的設(shè)備(廣播風(fēng)暴)
? 思科模擬器測(cè)試
① 設(shè)備搭建
② 計(jì)算機(jī)1給計(jì)算機(jī)0發(fā)數(shù)據(jù)
(6) 路由器(Router)
? 網(wǎng)線直連、同軸電纜、集線器、網(wǎng)橋、交換機(jī) ?連接的設(shè)備必須在同一網(wǎng)段 ?連接的設(shè)備處在同一廣播域 ? 路由器 ?可以在不同網(wǎng)段之間轉(zhuǎn)發(fā)數(shù)據(jù) ?隔絕廣播域
?主機(jī)發(fā)數(shù)據(jù)之前,首先會(huì)判斷目標(biāo)主機(jī)的IP地址跟自己是否在同一網(wǎng)段? ? 在同一網(wǎng)段:ARP獲取MAC地址、通過交換機(jī)\集線器傳遞數(shù)據(jù) ? 不在同一網(wǎng)段:通過路由器轉(zhuǎn)發(fā)數(shù)據(jù),通過路由器的網(wǎng)關(guān)(Gateway)轉(zhuǎn)發(fā)
① 網(wǎng)橋、交換機(jī)等連接的設(shè)備必須在同一網(wǎng)段
② 交換機(jī)跨網(wǎng)段傳輸數(shù)據(jù)
? 【A】搭建設(shè)備
? 【B】設(shè)置網(wǎng)關(guān)的IP地址和設(shè)備的網(wǎng)關(guān)地址
?【C】傳輸數(shù)據(jù)
? ARP廣播拿到網(wǎng)關(guān)的MAC地址
? 不同網(wǎng)段的設(shè)備連接需要使用路由器
柚子快報(bào)邀請(qǐng)碼778899分享:【1】網(wǎng)絡(luò)協(xié)議基礎(chǔ)概念
文章來源
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。