网络通信.

1.物理层:网络通信的基础设施 运快递的公路

2.数据链路层 两个相邻的节点之间如何传输 两个集散点之间的传输

3.网络层 两个点之间的路径规划 物流公司规划快递的路径

4.传输层 两个点之间的通信(不考虑路径规划) 卖家发货 只考虑起点和终点

5.应用层 数据传输过去之后 具体如何使用 快递拿到之后如何使用

网络编程的主要工作 写应用层的代码 处理应用层的协议数据

从5到1往下传输 每次传输都会依次添加报头 就称为封装 QQ1发送

从1到5往上传输 每次传输都会解析去掉报头 QQ2接收

传输层提供两种协议

TCP:有连接,可靠传输,面向字节流,全双工

UDP:无连接,不可靠传输,面向数据报,半双工

可靠传输:数据对方有没有接收到,发送方有感知 打电话就是可靠的,可以知道对方有没有听到

不可靠传输:数据对方有没有接收到,不管,也不知道 微信就是不可靠的,不知道对方有没有看到我的消息

全双工:双向通信 一个管道 A->B B->A 同时进行

半双工:单向通信 一个管道 要么A->B 要么B->A 不能同时进行

UDP

UDP的Socket API

DatagramSocket和DatagramPaclet 核心类

socket类本质相当于文件 构造一个DatagramSock对象,相当于打开了一个内核中的socket文件

打开后就可以传输数据了

传输数据已 DatagramPacket为基本单位

InetSocketAddress类 IP地址+端口号

send发送数据 receive接收数据 close关闭数据

DatagramOacket 表示一个UDP数据报 UDP是面向数据报的协议

DatagramSocket

send、receive、close

DatagramOacket

DatagramSocket:对应一个socket文件

DatagramPacket:对应一个UDP数据报构造方法

1.只包含缓冲区 用于接收数据的时候,构造了一个空的数据报

2.包含缓冲区和一个InetAddress(客户端IP和端口号)

3.包含缓存区和服务器IP和服务器端口号

程序要进行网络通信,需要一个端口号

端口号相当于用来在网络上区分进行的身份标识符

分配端口号有 1.手动指定 2.系统自动分配

TCP

TCP两个核心类

ServerSocket 服务器使用socket

accept没有参数 返回值是一个Socket对象

功能是等待服务器和客户端建立连接,建立成功后则会把这个连接获取到进程中。接下来就通过Scoket返回的对象来进行交互

Scoket服务器和客户端都使用socket

通过socket对象就可以进行发送接收数据

socket内部包含了输入流对象(接收) 输出流对象 (发送)

ServerSocket只是在服务器这把使用,连接

accpet把操作系统内核建立好的连接拿到应用程序中

Socket:客户端和服务器都要使用,负责给这个客人提供服务

Socket对象中能获取到InputStream(接收)和OutputStream(发送)

服务器客户端工作流程

1.客户端读取用户输入

2.构造请求发送给服务器

3.读取请求并解析

4.根据请求计算响应

5.把响应数据返回客户端

6.读取服务器返回的响应

7.把响应数据展示给用户

应用层协议 自定义协议

DNS协议 域名解析 域名网址

sougou.com就是搜狗的域名

域名可以通过DNS系统自动转换成对应的IP地址

当电脑能使用qq,但打不开网页,多半是DNS挂了

8,8,8,8

114,114,114,114

明确传递的信息 数据的组织格式

分隔符

固定长度

xnm

json

protibuffer

传输层协议

UDP

UDP报头包含 源端口号、目的端口号、DUP长度、校验和均是2字节

UDP载荷 完整的应用层数据报

UDP长度是64kb 所以UDP一次只能传64kb的数据 缺陷

TCP

有连接 可靠传输 面向字节流 全双工

TCP机制

确认应答 延时重传 连接管理 滑动窗口 流量控制 拥塞控制 延时应答 捎带应答

前三个是保证了TCP的可靠性

滑动窗口提高传输效率的机制 本质就是把等待ACK的时间重叠 减少等待时间

但是和无可靠性的UDP相比,效率还是要差些。

TCP面向字节流

面向字节流指的是读写载荷数据的时候,是按照字节流方式读取的。

TCP本身仍然是一个一个数据报方式传输的

面向字节流核心问题是粘包问题

如何一个TCP连接里面只传一个应用数据报,不会发送粘包

如果一个TCP连接里,传输多个应用层数据报,这时候容易区分不清,哪个是整体的应用层数据,就会发生粘包问题

解决粘包问题就是在应用层明确包的边界

使用分隔符或约定长度等等。就是自定义协议

高频题

操作系统 进程和线程的区别

网络 TCP的三次握手和四次挥手

数据结构 哈希表

三次握手

A发送SYN

B发送SYN和ACK

客户端发送ACK

客户端发送 尝试建立连接的请求 syn,同步报文段

服务段发送 syn同步报文段和ack,确认报文段

客户端发送 ack

三次握手的意义在于保证可靠性的机制

在正式通信前,先确定好通信链路是否畅通,如果不畅通后续大概率丢包

为啥要握三次

握手三次是在验证通信双方的发送能力和接收能力是否正常

三次握手B返回ACK和SYN都是内核收到A的SYN立即返回的

协商重要参数

四次挥手

A发送FIN

B发送ACK

B发送FIN

A发送ACK

B发送ACK和FIN之间会有不知道的时间间隔。

B是代码人员调用close菜发送FIN

TCP状态

1.LISTEN服务器状态

服务器启动完毕,绑定端口成功(手机开机状态,随时可以接听电话)

2.ESTABLISHED

连接建立好了,可以进行后续通信。(电话号码接通,对方已接听)接下来可以进行说话了

3.CLOSE_WAIT

等待代码中调用close方法,发送FIN

4.TIME_WAIT

主动发起FIN的一方,会进入TIME_WAIT

主动一方收到FIN后,返回ACK进入TIME_WAIT

防止最后一个ACK丢失,当接受端返回ack等待一段时间后,发起端才断开连接

TCP和UDP区别

如何需要关注可靠性优先考虑TCP

如果传输单个数据报比较大 优先考虑TCP UDP上限是64kb

如果可靠性要求不高,但性能要求高 优先考虑UDP

如果需要广播 一个放松N个接收 如直播就优先考虑UDP

从浏览器中输入URL开始,最终看到网页,中间都发生了什么?

浏览器是客户端,输入URL就会访问对应的服务器

1.应用层角度:1.DNS解析 2.构造HTTP请求

2.传输层角度:TCP协议 1.三次握手建立连接 2.传输数据(确定应答,超时重传,滑动窗口,流量控制,拥塞控制)

3.网络层角度:网络数据报转发过程.一跳一跳的方式来转发(路由表匹配规则,下一跳相关内容)

4.数据链路层角度:以太网数据帧,mc地址,mac在转发过程中如何变化,MTU,MTU影响到的IP分包

5.物理层角度:上诉数据会转成“光信号”“电信号”进行编码,传输

6.总结:发送过程中,涉及到从上到下,封装,接收方,涉及到从下到上的分用。

客户端给服务器发送请求的过程

后面服务器根据请求计算响应,把响应按照类似的流程转发给客户端

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/464812.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java----网络编程(一)

一.什么是网络编程 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。所谓网络资源就是网络中获取数据。而所…

SpringTask实现的任务调度与XXL-job实现的分布式任务调度【XXL-Job工作原理】

目录 任务调度 分布式任务调度 分布式任务调度存在的问题以及解决方案 使用SpringTask实现单体服务的任务调度 XXL-job分布式任务调度系统工作原理 XXL-job系统组成 XXL-job工作原理 使用XXL-job实现分布式任务调度 配置调度中心XXL-job 登录调度中心创建执行器和任务 …

安装OpenEBS,镜像总是报错ImagePullBackOff或者ErrImagePull的解决方法

按照 KubeSphere 官方文档安装 OpenEBS,镜像总是报错ImagePullBackOff或者ErrImagePull的解决方法 helm 有很多更换 源 的文章,有一些是写更换阿里云的源,但是阿里云的源根本没更新OpenEBS的镜像。 在网上找到1个可用的源: 可用的…

nodejs pkg打包跨平台执行文件,带.node插件

在nodejs引入的第三方库中,大部分插件都是nodejs原生开发,使用pkg可以快速打包,生成windows、linux(ubuntu、centOS等)、麒麟系统下面执行文件。遇到了第三方插件gdal、sharp、sqlite3,在webstorm中打包生成执行文件,跨平台部署的时候会出现找不到###.node文件,需要获取部…

BUUCTF-----[CISCN 2019 初赛]Love Math

<?php error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("太长了不会算");}$blacklist [ , \t, \r, \n…

Employing Multi-Estimations for Weakly-Supervised Semantic Segmentation

eighted selective training (WST) 辅助信息 作者未提供代码

《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)

1.简介 我们在实际工作中&#xff0c;有可能遇到有些web产品&#xff0c;网页上有一些时间选择&#xff0c;然后支持按照不同时间段范围去筛选数据。网页上日历控件一般&#xff0c;是一个文本输入框&#xff0c;鼠标点击&#xff0c;就会弹出日历界面&#xff0c;可以选择具体…

x6.js 从流程图组件库中拖拽组件到画布dnd使用

上一篇已经了解到了x6.js常用功能以及使用方法。但我们使用流程图的时候还少不了一个非常重要的功能那就是拖拽组件库里的组件进来。如下图&#xff1a; 首先是布局这块&#xff0c;拖拽组件库的视图中布局无需我们去写&#xff0c;我们只需把界面搭建好。 添加组件库 1.搭建布…

LeetCode 0310.最小高度树:拓扑排序秒了

【LetMeFly】310.最小高度树&#xff1a;拓扑排序秒了 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-height-trees/ 树是一个无向图&#xff0c;其中任何两个顶点只通过一条路径连接。 换句话说&#xff0c;一个任何没有简单环路的连通图都是一棵树。 给你…

JavaScript 进阶(一)

一、作用域 作用域&#xff08;scope&#xff09;规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问。 作用域分为&#xff1a; 局部作用域 、全局作用域。 1.1局部作用域 局部作用域分为函数作用域和块作用域。 1. 函数作用域&#xff1a; 在函数…

力扣刷题Days20-151. 反转字符串中的单词(js)

目录 1,题目 2&#xff0c;代码 1&#xff0c;利用js函数 2&#xff0c;双指针 3&#xff0c;双指针加队列 3&#xff0c;学习与总结 1&#xff0c;正则表达式 / \s /&#xff1a; 2&#xff0c;结合使用 split 和正则表达式&#xff1a; 1,题目 给你一个字符串 s &am…

[漏洞分析]Fortinet FortiNAC CVE-2022-39952简析

Fortinet FortiNAC CVE-2022-39952简析 一、影响版本二、概况三、利用CVE-2022-39952四、POC 一、影响版本 FortiNAC 9.4.0 FortiNAC 9.2.0 - 9.2.5 FortiNAC 9.1.0 - 9.1.7 FortiNAC 8.3 - 8.8 二、概况 Fortinet 在其安全公告中表示&#xff0c;他们在keyUpload script…

深入解析红黑树(RB-Tree):原理、操作及应用

文章目录 一、红黑树的特点与性质二、红黑树的实现1、实现红黑树的插入操作2、红黑树的验证方法a. Check 函数b. IsBalance 函数 红黑树作为一种自平衡的二叉搜索树&#xff0c;在计算机科学领域中占据着重要的地位。它的设计旨在在维持树的平衡性的同时&#xff0c;保证各种操…

【JavaScript】JavaScript 运算符 ⑤ ( 赋值运算符 | 基础赋值运算符 与 复合赋值运算符 )

文章目录 一、JavaScript 赋值运算符1、赋值运算符 概念2、基础赋值运算符 与 复合赋值运算符3、复合赋值运算符4、完整代码示例 一、JavaScript 赋值运算符 JavaScript 赋值运算符种类 : 基础赋值运算符 : 等于 : ; 复合赋值运算符 : 加等 : 减等 : -乘等 : *除等 : /取模等…

基于springboot+vue的房屋交易平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

App拉新必备!Xinstall渠道追踪,让每一分钱都花在刀刃上

在移动互联网时代&#xff0c;App已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;对于App开发者来说&#xff0c;如何有效地进行拉新&#xff0c;提高用户留存率&#xff0c;一直是一个难题。而渠道追踪&#xff0c;作为App推广过程中的重要环节&#xff0c;往往被忽…

029—pandas 遍历行非向量化修改数据

前言 在 pandas 中&#xff0c;向量化计算是指利用 pandas 对象的内置方法和函数&#xff0c;将操作应用到整个数据结构的每个元素&#xff0c;从而在单个操作中完成大量的计算。 但在一些需求中&#xff0c;我们无法使用向量化计算&#xff0c;就需要迭代操作&#xff0c;本例…

前端三件套 | 综合练习:模拟抽奖活动,实现一个简单的随机抽取并显示三名获胜者

随机运行结果如下&#xff1a; 参考代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

通俗易懂的Python循环讲解

循环用于重复执行一些程序块。从上一讲的选择结构&#xff0c;我们已经看到了如何用缩进来表示程序块的隶属关系。循环也会用到类似的写法。 for循环 for循环需要预先设定好循环的次数(n)&#xff0c;然后执行隶属于for的语句n次。 基本构造是 for 元素 in 序列: statemen…

常用芯片学习——BME280芯片

BME280 温湿度气压传感器 芯片介绍 BME280是基于成熟传感原理的组合数字湿度、压力和温度传感器。该传感器块采用极为紧凑的金属盖LGA封装&#xff0c;占地面积仅为2.5x2.5mm2&#xff0c;高度为0.93mm。该传感器提供I2C以及SPI接口。它的小尺寸和低功耗允许在电池驱动的设备…
最新文章