网络

本文深入解析网络通信的基本过程,从数据在网络各层的流动到TCP/IP协议的具体实现,包括TCP三次握手和四次挥手的过程。阐述了HTTP协议与socket接口的关系,以及不同通信模式下的信道类型。

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

所有系统I/O分为两个阶段:等待就绪,操作。读函数分为等待系统可读和真正的读。写函数分为等待网卡可写和真正的写。

数据如何发送?

1.应用程序将数据写入进程的内存地址空间。

2.应用程序通过系统函数接口向内核发出系统调用,系统内核将用户态内存数据复制到内核缓冲区。

3.内核通知网卡控制器,网卡控制器将内核缓冲区数据复制到网卡缓冲区。

4.网卡使用内部特定物理装置将网卡缓冲区中数据转换成电信号或光信号然后发送到线路中。

 一个用户向服务器连续进行1000次请求的过程中,任何时刻服务器的网卡接收缓冲区中只有来自该用户的一个请求。而100个用户同时向服务器分别进行10次请求的过程中,服务器网卡接收缓冲区最多有100个等待处理的请求。

 如果没有猜错,一台服务器接收请求的能力取决于网卡的性能。网卡的接收缓冲区的大小决定了最多能接收多少请求,当然也跟请求中数据的大小有关。超出了网卡接收缓冲区的范围一定会出现网络阻塞,但程序处理请求的线程过多也会导致系统阻塞

 

HTTP超文本传输协议和socket接口:

http请求指采用http协议的请求,http协议指应用层对请求传递的数据的格式定义,请求中应该包含哪些字段。比如referer,user-agent等

首先HTTP不是连接,http只是一个基于可靠连接的应用层的超文本传输协议(只是应用层对数据形式的一种格式规定而已,使用socket接口可以实现http协议请求,只要java的socket发送的数据格式符合http协议要求即可,当然socket还可以实现ftp)。实现可靠传输的网络都可以使用HTTP协议,不只是实现TCP可靠连接的网络才能用,当然使用TCP可靠连接来实现可靠连接的网络比较多。

而socket也不是连接,socket接口是TCP/IP协议组排除应用层后的封装调用(不封装应用层使用户选择具体应用层的协议时更具灵活性,不然用户没得选了),是面向程序员的不包含应用层的TCP/IP协议组的实现。调用socket接口可实现TCP/IP体系的网络互连功能。因此使用socket接口调用TCP/IP协议实现联通性时既可以使用TCP可靠连接,也可以使用UDP不可靠连接。直接在程序中用IO流输入输出即可实现数据传输,具体怎么封装数据可自己选择某个应用层协议或自定义来实现。

java中socket的核心API有Socket类(传输层默认使用TCP可靠连接),ServerSocket类(服务端的Socket),DataGramSocket类(传输层使用UDP协议)。

传输层的连接协议目前知道的只有TCP可靠传输和UDP不可靠传输

 

分层:应用层,传输层,网络层

          数据链路层,物理层。

常见应用层协议:HTTP,FTP文件传输协议,SMPP短信协议,telnet远程登录控制协议,IM即时通讯的一些应用层协议

实现超文本传输首先要和服务器建立可靠连接,通常使用TCP连接。TCP连接需要三次握手,当三次握手的前两次完成后,浏览器就把HTTP请求报文作为TCP连接第三次握手的报文发给万维网服务器。

 

许多情况下我们需要使用信道这个概念,信道和电路不同,信道用来表示向某一个方向传送信息的媒体。因此,一条通信电路往往包含一条发送信道和一条接收信道。
从通信的交互方式来看可将信道分为:
单向通信:又称单工通信,即只能由一个方向的通信而没有反向的交互。如无线电有线电广播,电视广播。
双向交替通信:又称半双工通信。通信双方都可以发送信息,但不能双方同时发送同时接收。一方发送一方接收,过一段时间再反过来。

双向同时通信:又称全双工通信,通信双方可以同时发送和接收消息。

单工通信只需要一条信道,双工通信需要两条信道(两个方向)。

信道的概念类似于流的概念,只不过输入输出流是针对程序这个输入输出的点,而信道是针对通信线路这条线。

 

传输层的UDP协议是无连接的,谈不上长链接还是短连接。而TCP则基于连接提供全双工通信(HTTP的限制导致其使用的TCP连接只使用了半双工通信的功能)。

 

TCP三次握手:A发起建立连接请求,B收到后如果同意建立连接则向A发出确认,A再次向B进行确认(避免A第一次的请求延时或B返回的确认丢失或延时后A不想连了B却以为建立了和A的连接一直等待),则连接建立。三次握手只是建立建立,真正的传输数据还没开始(http确实在第三次握手时就开始发送数据报文了)。

TCP四次握手:A发起释放连接请求,B回复A进行确认(确认后A不能再向B发送数据,A到B方向的连接关闭)。然后A等待B发起释放连接请求,A回复B进行确认(确认后B到A方向的连接被关闭)。至此连接才算完全关闭。

内容概要:本文介绍了多种开发者工具及其对开发效率的提升作用。首先,介绍了两款集成开发环境(IDE):IntelliJ IDEA 以其智能代码补全、强大的调试工具和项目管理功能适用于Java开发者;VS Code 则凭借轻量级和多种编程语言的插件支持成为前端开发者的常用工具。其次,提到了基于 GPT-4 的智能代码生成工具 Cursor,它通过对话式编程显著提高了开发效率。接着,阐述了版本控制系统 Git 的重要性,包括记录代码修改、分支管理和协作功能。然后,介绍了 Postman 作为 API 全生命周期管理工具,可创建、测试和文档化 API,缩短前后端联调时间。再者,提到 SonarQube 这款代码质量管理工具,能自动扫描代码并检测潜在的质量问题。还介绍了 Docker 容器化工具,通过定义应用的运行环境和依赖,确保环境一致性。最后,提及了线上诊断工具 Arthas 和性能调优工具 JProfiler,分别用于生产环境排障和性能优化。 适合人群:所有希望提高开发效率的程序员,尤其是有一定开发经验的软件工程师和技术团队。 使用场景及目标:①选择合适的 IDE 提升编码速度和代码质量;②利用 AI 编程助手加快开发进程;③通过 Git 实现高效的版本控制和团队协作;④使用 Postman 管理 API 的全生命周期;⑤借助 SonarQube 提高代码质量;⑥采用 Docker 实现环境一致性;⑦运用 Arthas 和 JProfiler 进行线上诊断和性能调优。 阅读建议:根据个人或团队的需求选择适合的工具,深入理解每种工具的功能特点,并在实际开发中不断实践和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值