
网络
文章平均质量分 95
网络的大致理解
iiiii空
千里之行,始于足下。
展开
-
网络层 --- IP协议
众所周知,网络传输是有一定概率丢包的,如果分片了,对于接收端网络层而言,它必须收到所有的分片,只要丢了其中的某一个,这次传输都是失败的 (需要重传),所有分片都会被丢弃,因此,分片实质上是增加了丢包概率,也正因为如此,操作系统内部是不愿意作分片的,体现上就是传输层的MSS,但是,我们知道,在跨网络传输中,会经过不同的设备,而不同的设备的MTU可能不一样,因此,分片行为在所难免,但是传输层的MSS可以避免频繁分片的情况。一旦支付完成,运营商会激活用户的互联网服务,允许路由器访问互联网;原创 2024-04-29 15:03:01 · 1147 阅读 · 0 评论 -
数据链路层
最后再补充一点,尽管TCP有MSS,通信时,双方主机也会协商MSS的值,但是,由于不同设备的MTU是不一样的,因此,数据在跨网络传输中,经过不同的设备 (MTU不一样),也会存在数据分片的情况,但是,MSS 能在很大程度上减少分片的可能,进而在一定程度上,提高了网络传输效率和稳定性。因为,此时要对IP数据报进行封装,即添加MAC帧报头,源MAC地址很好获得,就是路由器C的MAC地址, 可是目的MAC地址是主机B的MAC帧地址,但是,此时路由器C不知道,它只知道主机B的IP地址,不知道主机B的MAC地址。原创 2024-04-29 14:51:34 · 627 阅读 · 1 评论 -
传输层 --- TCP (下篇)
TCP主要是为了保证传输可靠性,但也在效率和其他方面做了努力。可靠性:校验和序号和确认序号确认应答按序到达去重连接管理超时重传流量控制拥塞控制提高性能:滑动窗口快速重传延迟应答捎带应答其他:定时器(比如超时重传定时器,保活定时器,TIME_WAIT定时器等)原创 2024-04-05 14:09:14 · 1089 阅读 · 0 评论 -
传输层 --- TCP (上篇)
我们知道,TCP 协议是面向字节流的, 因此我们可以将 TCP 协议的发送缓冲区看成一个 char buffer[NUM] 的字符数组,而上层将数据拷贝到发送缓冲区中,实质上就是拷贝到这个字符数组中,而我们知道,数组有一个天然的属性,就是数组下标,这里的数组下标就可以作为每一个数据的编号,即序列号。TCP自身无法判定数据段和数据段的边界,也不提供数据段整体的大小信息。同时,由于序号的存在,接收方收到数据后,在向上交付时,可以根据序号来进行排序,让上层得到的数据是有序的, 这种机制我们称之为按序到达。原创 2024-04-05 14:09:10 · 1459 阅读 · 0 评论 -
传输层 --- UDP
因为UDP协议用的端口号是16位的,而UDP协议是基于操作系统的,而操作系统提供了一系列的系统调用接口(比如socket接口)来支持网络通信,应用层通过这些接口与网络进行交互,因此,为了与UDP协议和操作系统保持一致,应用层需要使用16位的数据类型来定义端口号。原创 2024-04-05 14:09:06 · 2423 阅读 · 0 评论 -
探究 HTTPS 的工作过程
加密: 将明文进行一系列变换,生成密文;解密: 将密文进行一系列变换,生成明文;在加密和解密的过程中,往往需要一个或者多个中间数据,辅助这个过程,这样的数据我们称之为密钥。数据摘要也称之为数字指纹, 其基本原理是利用单向散列函数 (Hash函数) 对信息进行运算, 生成一固定长度的数字摘要。数字摘要并不是一种加密机制, 因为, 如果是加密,那么必然要有解密,而哈希是无法逆推的,一旦对原始文本经过 Hash 形成数据摘要, 很难 (几乎不可能) 根据数据摘要逆推原始文本;原创 2024-03-26 21:04:24 · 2486 阅读 · 0 评论 -
HTTP --- 下
上面的过程大致是相同的,只不过提交表单的方式不同罢了, 但为了更好地理解,我们可以画一下图,形象的描述下这个过程:因为,在我们的测试中,服务端的默认首页就是表单,因此,客户端通过IP:Port就能访问到服务端的默认首页,也就是表单,表单收集用户的数据,并将数据以特定的方式 (GET、POST) 传递给服务端。GET方式,是将表单数据附加到HTTP请求的URL中传递给服务端。由于数据明文添加在 URL 中,因此用户输入的信息会在 URL 中回显,不够私密,适合传输一些不敏感的数据。POST方式,原创 2024-03-24 16:27:37 · 1142 阅读 · 0 评论 -
HTTP --- 上
HTTP 协议本质上是一个文本协议,因为它采用文本格式来进行请求和响应的传输和通信,同时从 HTTP 请求和响应的结构也可以看出,它们都是由文本数据组成的,各种属性和信息也以文本形式呈现;域名后的第一个 "/" 我们称之为 Web 根目录, 这个目录一般是由服务端自定义的,它代表着服务端资源的起始地址,是客户端访问服务端资源的入口路径;未来,服务端的各种资源都可以放在这个路径 (Web根目录) 下,并通过特定的 URL 来访问这些资源。原创 2024-03-22 21:54:31 · 1072 阅读 · 0 评论 -
JSON 的了解和使用
使用 Json::StyledWriter::write 函数,你可以将 Json::Value 对象中的 JSON 数据转换为易于阅读的字符串,以便于输出、保存或传输。因为我们需要在 C++ 中解析和生成JSON数据, 因此我们需要安装 jsoncpp库, 用于处理JSON数据, 它提供了一组简单的API,可以方便地解析JSON字符串、生成JSON字符串以及在C++对象和JSON之间进行转换。Json::Reader::parse 是一个函数接口,用于将 JSON 字符串解析为 C++ 中的数据结构。原创 2024-03-17 23:26:53 · 1957 阅读 · 0 评论 -
序列化和反序列化
如上就是我们自己写的一个应用层代码,目前我们解决了三个问题:序列化和反序列化;定制了自己的协议;将我们的服务守护进程化, 让它变成一个网络服务;原创 2024-03-17 14:36:56 · 923 阅读 · 0 评论 -
套接字编程 --- 三
答案是:当然不影响咯, 因为进程具有独立性 (独立的地址空间、文件描述符表等等), 会以写实拷贝的方案保证自己的独立性。原创 2024-03-11 21:22:41 · 724 阅读 · 0 评论 -
套接字编程 --- 二
事实上,demo2 和 套接字编程 --- 一 中的 demo1只有在服务端处理数据不同罢了。demo2中是将客户端的数据当成了命令行字符串处理, 借用 popen 达到命令行解析、执行命令 or 进程,并将处理结果写入管道。服务端通过返回的文件指针读取管道内容,并将数据写回客户端。popen 本质上是调用了 fork 和 pipe ,因此,popen处理完毕后,使用 pclose 函数来关闭文件指针并等待子进程结束。原创 2024-03-10 10:47:59 · 1010 阅读 · 0 评论 -
套接字编程 --- 一
1、 AF_INET 是一个宏值,代表着网络套接字。2、 SOCK_DGRAM, 标定这里是数据报套接字3、 socket 创建一个套接字,成功返回一个文件描述符。4、 bind 主要目的是地址信息 (struct sockaddr_in) 与特定的套接字绑定起来。5、 主机序列和网络字节序,在网络通信时,要注意数据的字节序。例如,传输到网络的数据,需要使用网络字节序,特别是填充 struct sockaddr_in,和提取struct sockaddr_in 的特定属性时,要格外注意。原创 2024-03-08 17:54:10 · 874 阅读 · 0 评论 -
初始网络 --- 网络基础
因为是刚进入网络,因此这篇文章主要目的:让我们对网络有个基本认识。原创 2024-03-05 16:28:03 · 1071 阅读 · 0 评论