Linux10(计算机网络01)

#技术笔记

1.应用层

应用层为用户提供了与网络通信服务交互的接口 ,可以让开发者根据具体的应用需求实现特定的逻辑和功能 ,使得网络服务在封装了底层网络服务的情况下,能定制化 的满足特定场景需求。而在应用层的开发中最常遇到的就是HTTP协议。HTTP的核心功能就是在网络上的客户端服务器之间传输超文本数据,这个传输过程就是构建HTTP请求报文和响应报文。

1.1 HTTP请求报文

HTTP请求报文 分为请求行、请求头、空行、请求体(请求正文)四部分,其中一些消息头和正文是可选的,消息头和正文内容要用空行隔开。

请求行 的构成由请求方法、请求资源、请求协议构成,常见的请求方法有GETPOST两种,GET主要用来进行数据查询,POST主要用来进行提交数据,这是两者的本质区别。请求头 了解一些常用的,Accept 用来知道资源的传递类型;Accept-Charset 浏览器告诉服务器支持哪种字符集,例如UTF-8;Accept-Encoding 浏览器能进行解码的数据编码方式;Accept-Language 浏览器所希望的语言种类; User-Agent 浏览器的类型;Connection 表示是否需要持久连接,例如这里是Keep-Alive就是持久连接;Cookie 保存登录信息;Host 客户端意图访问的原始目标服务器(初始URL中的主机和端口) 等。请求体一般用来传输客户端需要传递给服务器的数据信息等,例如一些要安全保密的信息。

1.2 HTTP响应报文

HTTP响应报文,分为响应行、响应头、空行、响应体 (跟HTTP请求报文联合记忆非常好记),其中消息头和正文都是可选的,消息头和正文之间要用空行隔开。

响应行 的构成由,状态版本、状态码、原因短语。响应头有,Location 指示新的位置,搭配重定向状态码使用; Set-Cookie 服务器发送的Cookie 等。响应体内容可以是文本数据,也可以是二进制类型数据。

1.3 HTTP协议的不足

通讯使用明文,内容可能被窃听;验证通讯方身份的时候,可能被伪装;无法验证报文的完整性,内容可能被篡改。

为了解决窃听问题,可以采用加密方式,常见的加密方案有两种,一种对称加密 ,也就是加密和解密是同一种方式,另一种是非对称加密,是一种公钥和私钥的形式。

1.4 抓包

抓包追踪一个http请求,获取一些关键信息。

可以追踪哪些信息呢?状态码 看看200有没有成功; 请求方式 get、post是不是想要的方式;IP地址对不对;端口对不对;服务器内部路径对不对;携带的参数对不对;返回的参数对不对。

2. 传输层

2.1 TCP协议

TCP是传输层协议 ,是面向连接、全双工通信、字节流、可靠的协议。面向连接,就是类似打电话的对方在不在,是否一直连接着;全双工就类似电话双方同时bb;字节流就是按序收到连续的内容;可靠就是内容有没有错、顺序对不对等。了解这些可以更好的理解TCP的各种机制,确认啊,为什么设计超时重传,检验和,序号等。

2.1.1 TCP头部格式的各个字段:

(1) 源端口 用来记录发送方的发送端口

(2) 目的端口 记录目标主机的接收端口

(3) 序号seq 指的是本报文段发送数据的第一个字节的编号

(4) 确认号ack 表示之前的数据已经接收了,期待下一个接收的序号是多少(序号和确认号结合个例子了解就ok)

(5) 数据偏移 占4位,单位4B,所以最大值为60B = 15 * 4B,也就是说TCP报文首部最小为20字节,最大为60字节,也意味着 选项 + 填充 = 0~40字节。

(6) 紧急位、确认位、推送位、复位位、同步位、终止位紧急 URG = 1 代表要立即把这部分数据递送给上层的应用程序,确认位 ACK = 1 表示 ack有效,推送位 PSH = 1 代表应尽快交付给接收到该请求的应用进程,而不是等整个缓冲区存满后再上交, 复位位 RSH = 1 代表TCP链接中出错,需要重新建立连接,同步位 SYN = 1 表示这是一个连接建立请求,终止位 FIN = 1代表这是一个释放连接的位,表示发送的一方数据已发送完毕

(7)窗口大小表示发送端的接收窗口所能允许接受到对方发送的数据量的大小

(8) 校验和 检验首部和数据部分

2.1.2 可靠传输

TCP协议的可靠性和可靠传输是靠序号和确认机制,以及重传机制保证的。

2.1.3 累计确认

累计确认意味着一个ACK报文段/确认报文,会确认该确认号之前截止到序列号为止的所有字节。

2.1.4 快重传

当收到3个冗余的ACK,也就是一共4个确认的,就会立马重传报文。

2.1.5 TCP连接建立:三次握手

第一次握手,客户端发送SYN = 1 表示要建立连接,然后消耗一个序号;第二次握手,服务器发送一个确认报文,ACK = 1, ack代表x+1 之前的数据都接受了,期待下一个是x + 1,seq代表服务器自己发送的序号;第三次握手进行最终确认,ACK = 1,发送下一个期待接受的ack = y + 1。从这开始双方准备好进行数据传输。

2.1.6 TCP释放连接:四次挥手

两边都可以主动断开请求,这里示例一个客户端。

第一次挥手,发送FIN = 1,和一个seq = u代表客户端要发送的数据结束了,要准备断开连接了;第二次挥手代表服务器确认接受返回 ACK = 1,确认号为客户端的序列号+1( 也就是 ack = u + 1),此时客户端到服务器的连接被关闭;

第三次挥手代表服务器发送完成,也要发送一个FIN = 1的报文段,通知客户端没数据要发送了,从服务器接收到第二次挥手到第三次挥手之前这段间隔是服务器的CLOSE_WAIT阶段;

第四次挥手,最终确定,此时客户端会进行一个TIME_WAIT的阶段,要等待2MSL(Maximum Segment Lifetime)最长报文段生存时间。

相关推荐
IT菜鸟程1 小时前
Linux 系统安全加固实战:从密码策略到 SSH 访问控制
linux·ssh·系统安全
minji...1 小时前
Linux 网络基础之UDP协议(四)传输层协议 UDP,再谈端口号,UDP 特点
linux·服务器·开发语言·网络·c++·tcp/ip·udp
爱编码的小八嘎1 小时前
c语言完美演绎9-26
c语言
emiya_saber1 小时前
docker cmd
linux·运维·docker
艾莉丝努力练剑1 小时前
【Linux网络】Linux 网络编程:应用层自定义协议与序列化(1)初识
linux·运维·服务器·网络·c++·udp·tcp
在角落发呆1 小时前
c socket 服务器转发,c socket 服务器转发的方法
服务器·c语言·开发语言
сокол1 小时前
【网安-Web渗透测试-内网渗透】内网横向移动——Impacket套件
服务器·windows·网络安全·系统安全
feng_you_ying_li1 小时前
linux之文件系统(2)
linux·运维·服务器
modelmd1 小时前
C 语言使用 gdb 调试
c语言