计算机网络

文章目录

  • 数据传输过程及接收过程
  • 应用层
  • 传输层

TCP/IP4层网络模型
1.应用层
2.传输层
3.网络层
4.数据链路层

数据传输过程及接收过程

用户A在聊天软件上输入hello world按下发送,发送给B
一: 传输
1.应用层:构建一个应用层的数据报文交给传输层
**在这里插入图片描述
2.传输层: 根据刚才传过来的数据,基于传输层协议构造出传输层协议报文发送给网络层,以TCP为例
在这里插入图片描述
3.网络层: 将TCP数据包根据IP协议构造成IP数据报(包含源IP和目的IP),发送给数据链路层
在这里插入图片描述
4.数据链路层: 主要协议是以太网协议,将IP数据报构造为一个以太网数据帧发送给物理层

在这里插入图片描述
5.物理层: 将以太网数据帧处理后,通过网线传输出去

二.接收
就是传输的逆过程,传输到对方的物理层后,一层层解构,到应用层

应用层

主要为Http协议:
无状态
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,用户体验度也不好。为了解决HTTP协议无状态,于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。
在这里插入图片描述
请求报文:
1.请求行: 请求方法,url,协议及版本
2.请求头: User-Agent: 当前用户访问设备,Referer: 从那个页面跳转过来的url,Content-Type: 请求体格式类型,Content-Length: 请求体长度,
Host: 初始url的主机及端口号等…
3.空行: 标志请求头的结束
4.请求正文

响应报文:
1.状态行: 1)协议及版本,2).响应状态码(1xx: 服务器处理请求中,2xx: 响应成功,3xx: 重定向,4xx: 客户端错误,5xx服务器错误),3).状态码描述
2.响应头:Content-Type: 请求体格式类型,Content-Length: 请求体长度等…
3.空行: 标志响应头的结束
4.响应正文

传输层

主要协议为TCP/UDP
1.TCP:有连接,可靠传输,面向字节流,全双工

通信的两端都要有Socket(也可以叫“套接字”),是两台机器间通信的端点。网络通信其实就是Socket间的通信。
服务器端: ServerSocket:此类实现TCP服务器套接字。服务器套接字等待请求通过网络传入。
客户端: Socket:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
Server

public class Server{
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9999);
        Socket accept = serverSocket.accept();

        InputStream inputStream = accept.getInputStream();
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = inputStream.read(bytes)) != -1){
            System.out.println(new String(bytes,0,len));
        }

        serverSocket.close();
        accept.close();
    }
}
采用多线程
while (true) {
   Socket clientSocket = serverSocket.accept();

   Thread t = new Thread(() -> {
      processConnection(clientSocket);
   });
   t.start();
}

Client

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1",9999);
        PrintStream printStream = new PrintStream(socket.getOutputStream());
        printStream.print("hello world");

        socket.close();
        printStream.close();
    }
}

三次握手:
1.客户端发送SYN与服务器请求建立连接,服务器收到请求
此时: 服务器知道客户端有发送能力,服务器有接收能力
2.服务器向客户端发送SYN和ACK,表示自己可以建立连接,并请求与客户端同步
此时: 客户端知道自己和服务器都有发送和接收的能力
3.客户端返回ACK表示自己可以建立连接
此时服务器知道客户端有接收能力,自己有接收能力

到此,客户端和服务器都知道双方有发送和接收能力
在这里插入图片描述
四次挥手:设A,B已建立TCP连接断开时:
1.A向B发送FIN,表示A想要断开连接
2.B立即返回ACK并完成善后工作后返回FIN
3.B返回FIN,表示中断连接
4.A返回ACK,到此连接中断

UDP:
数据报套接字(datagram socket):使用UDP提供“尽力而为”的数据报服务
1.DatagramSocket:此类表示用来发送和接收UDP数据报包的套接字。
2.DatagramPacket:表示一个UDP数据报,每次发送/接收数据,都是在传输一个DatagramPacket对象

Server:

public class Accept {
    public static void main(String[] args) throws IOException {
        //接收端要绑定端口号
        DatagramSocket socket = new DatagramSocket(8888);

        DatagramPacket datagramPacket = new DatagramPacket(new byte[1024], 1024);
        socket.receive(datagramPacket);

        String s = new String(datagramPacket.getData(),0,datagramPacket.getLength());
        System.out.println(s);

        socket.close();
    }
}

Client:

public class Send {
    public static void main(String[] args) throws IOException {
        //不指定端口号,每次启动由系统随机分配
        DatagramSocket socket = new DatagramSocket();

        String request = "hello fs";
        DatagramPacket datagramPacket = new DatagramPacket(request.getBytes(StandardCharsets.UTF_8),
                                                           request.getBytes(StandardCharsets.UTF_8).length,
                                                           InetAddress.getByName("127.0.0.1"),
                                                      	   8888);
        socket.send(datagramPacket);
        socket.close();
    }
}

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

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

相关文章

java虚拟机反射机制

(1)Java虚拟机反射机制的定义? Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功…

MySQL事务隔离级别

一、概念说明 脏读:指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并不一定最终存在的数据,这就是脏读。 可重复读:在一个…

【GPT4】微软 GPT-4 测试报告(3)GPT4 的编程能力

欢迎关注【youcans的GPT学习笔记】原创作品,火热更新中 微软 GPT-4 测试报告(1)总体介绍 微软 GPT-4 测试报告(2)多模态与跨学科能力 微软 GPT-4 测试报告(3)GPT4 的编程能力 【GPT4】微软 GPT-…

ChatGPT和GPT-4带你选笔记本电脑

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

(只需三步)如何用chatgpt自动生成思维导图

目录 chatgpt是可以生成思维导图的!只需三步,非常简单! 第一步:打开chatgpt,告诉它主题 第二步,完善思维导图 第三步:查看思维导图的效果 chatgpt是可以生成思维导图的!只需三步&am…

vue2路由(下)

编程式路由导航 通过点击按钮实现push和replace俩种模式的跳转 实现:就是通过$router原型里面的方法 也能实现路由的跳转和后退,分别采用的是$router里面的black和forward方法 感觉就是BOM对象中的history对象里面的方法 正是前进,后是后…

C/C++|物联网开发入门+项目实战|嵌入式C语言高级|C语言常用关键字及运算符操作-学习笔记(8)

文章目录2-2: C语言常用关键字及运算符操作关键字参考: 麦子学院-嵌入式C语言高级2-2: C语言常用关键字及运算符操作 [重点] 掌握C语言的常用关键宇及其应用场景,使用技巧 关键字 编译器:预先定义了一定意义的字符串,32个。 s…

通讯录的实现(初级版本)

思维导图: 目录 思维导图: ​编辑 一,实现通讯录的第一步——实现逻辑 二,头文件内实现的内容 三,contect.c文件内的函数定义 3.1初始化通讯录:void InitContect(cotect*pc) 3.2:实现通讯录内容的增加&#xff…

Python的基础

这是我自己学习Python的三个星期的小总结,内容包含了规范、数据类型、函数、类和捕捉异常,做了一个简单的梳理,希望可以帮助到和我一样开始学习Python的小伙伴,也希望多多支持,相互进步,下面步入正题。 基…

【Python】Python中的列表,元组,字典

文章目录列表创建列表获取元素修改元素添加元素查找元素删除元素列表拼接遍历列表切片操作元组创建元组元组中的操作字典创建字典添加/修改元素删除元素查找字典的遍历合法的key类型列表 列表是一种批量保存数据的方式,列表使用[]表示 创建列表 创建两个空列表 …

Java对日开发成趋势?网友:找工作打开了新思路

近两年行业环境起起伏伏,企业降本增效,提高人才招聘的门槛,导致大家找工作时觉得越来越难,尤其是Java开发,主打的就是一个“卷”! 不过行业变革,挑战与机遇并存。Java作为编程语言排行榜的常年第…

malloc hook进行内存泄漏检测

记录下使用malloc的hook形式,写个小的demo,并记录遇到的问题 1. 实现代码: CMakeLists.txt和相应的memory_leak.cpp文件 cmake_minimum_required(VERSION 3.14) project(demo)set(_SRCmemory_leak.cpp)add_library(memory_leak SHARED ${_S…

SpringCloud:ElasticSearch之索引库操作

ElasticSearch索引库就类似数据库表,mapping映射就类似表的结构。 我们要向ElasticSearch中存储数据,必须先创建“库”和“表”。 1.mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:…

【无人机】采用最基本的自由空间路损模型并且不考虑小尺度衰落(多径多普勒)固定翼无人机轨迹规划(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【Android Audio】TimeCheck机制

TimeCheck机制(Android R/S) TimeCheck.cpp TimeCheck.h frameworks/av/media/utils/TimeCheck.cpp TimeCheck守护线程的作用: 当audioserver中IAudioFlinger,IAudioPolicyService,IEffect中的每一个binder函数调用时…

E4--光纤接口通信测试应用2023-04-17

1.场景 使用两块开发板A和B,通过光纤接口将在A板上ROM中存储的图片数据转发到B板并显示在B板连接的显示屏上,实现光纤接口通信。 具体场景是,由于A735T片上资源有限,因此ROM IP存储了一张1024*600(LVDS屏幕&#xff0…

深拷贝与浅拷贝

目录: 深拷贝与浅拷贝的区别实现深拷贝的方式利用JSON.parse(JSON.stringify())实现深拷贝的局限性cloneDeep与json的对比手写实现cloneDeep 深拷贝与浅拷贝的区别 深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。 深拷贝和浅拷贝的示意图大致如下&a…

SpringBoot——Scheduled定时任务

目录 1.静态定时任务 2.动态定时任务 在一些业务场景中,我们需要定义一些任务在我们指定的时间或是每隔一个时间段就自动执行,来作为任务的前提,保证业务的执行。比如:我们需要一个定时任务,每天早上6点执行&#xf…

多通道振弦传感器无线采集采集仪如何开始使用

多通道振弦传感器无线采集采集仪如何开始使用 开始使用 设备电源 VS208~432 可使用内置电池(默认)也可使用外部电池工作。 需要特别注意:严禁内置和外部电池(电源)同时使用,严重时会造成短路起火&#xff0…

靶机精讲之CTF4

主机发现 靶机193 端口扫描 服务扫描 80,25(明确版本)攻击面更大 web渗透 blog是交互式的程序 发现index可进行手动爆破(地址包含) http://192.168.10.193/index.html?page../../../../../../../../etc/passwd 无发…