一、OSI与TCP/IP各层的结构与功能,都有哪些协议?

OSI的7层协议和TCP/IP的四层协议的优点折中出了——五层协议体系结构

java接收tcp协议的 解析自定义包头向后读取结构体数据_HTTP

 1.1、应用层

作用:进程间通信的规则,不同的网络应用需要不同的应用层协议

有两个应用层协议需要了解:

域名系统DNS:

以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.

例如:一个公司的 Web 网站可看作是它在网上的门户,而域名就相当于其门牌地址,通常域名都使用该公司的名称或简称。比如:IBM 公司的域名是 www.ibm.com、Oracle 公司的域名是 www.oracle.com

HTTP协议(超文本传输协议):

所有的 WWW(万维网) 文件都必须遵守这个标准

1.2、传输层

作用:负责向两台主机进程之间的通信提供 通用的数据传输服务

传输控制协议TCP:

面向连接、可靠

用户数据协议UDP:

面向无连接、不可靠、尽最大努力传输服务

1.3、网络层

作用:在 计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。

以下是IP层协议:

IP协议

1.4、数据链路层

作用:两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。数据链路层将网络层交下来的 IP 数据报组装成

1.5、物理层

作用:实现相邻计算机节点之间比特流的透明传送

 

二、TCP三次握手和四次挥手

2.1、TCP三次握手

(1)示意图

了准确无误地把数据送达目标处,TCP协议采用了三次握手策略

java接收tcp协议的 解析自定义包头向后读取结构体数据_客户端_02

示意图详解:

  •  客户端–发送带有 SYN 标志的数据包–一次握手–服务端;
  • 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端;
  • 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

(2)为什么要三次握手

为了建立可靠的通信信道,目的是双方确认自己与对方的发送与接收是正常的

(3)为什么要传回SYN

接收端传回发送端,为了告诉发送端自己收到的信息确实就是你所发送的信号了,SYN就是握手信号。

(4)传了SYN,为什么还要传ACK

双方通信无误必须是两者互相发送信息都无误。传了SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要ACK信号验证

 

2.2、断开一个TCP连接需要四次挥手

(1)示意图

java接收tcp协议的 解析自定义包头向后读取结构体数据_HTTP_03

示意图详解:

客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送;

服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 ,

服务器-关闭与客户端的连接,发送一个FIN给客户端;

客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

(2)为什么要四次挥手

发送方和接收方任何一方都可能发送传输结束后 发送连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候则发出连接释放通知,对方确认后 就完全关闭了TCP连接

示例:

A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话A 不能要求 B 跟着自己的节奏结束通话。于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。

三、TCP协议如何保证可靠传输

(1)发送方给包编号,接收方对包排序。把有序数据传给应用层;

(2)校验和:端到端的校验和。目的是监测数据在传输过程中的任何变化,如果收到端的校验和有差错,TCP将丢弃此报文;

(3)TCP接收端会丢弃重复数据;

(4)流量控制:TCP连接的每一方都有固定大小的缓冲空间,当接收方来不及处理发送方数据,能提示发送方降低发送速率,防止丢包(流量控制协议是:滑动窗口协议);

(5)拥塞控制:网络拥塞时减少数据发送;

(6)ARQ协议:原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;

(7)超时重传:当TCP发出一个段后,他启动一个定时器,等待目的端收到这个报文段。如果不能及时收到确认,将重发这个报文段。

四、HTTP协议

4.1、在浏览器中输入url地址aaaaa显示主页的过程(HTTP协议)

(打开一个网页,整个过程会使用哪些协议?)

示意图:

java接收tcp协议的 解析自定义包头向后读取结构体数据_HTTP_04

详细过程:

(1)DNS解析

(2)TCP连接;

(3)发送HTTP请求

(4)服务器处理请求并返回HTTP报文

(5)浏览器解析渲染页面;

(6)连接结束

参考:

 

4.2、HTTP长连接、短链接

HTTP/1.0中默认使用短连接,HTTP/1.1起默认使用长连接。

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接(可设置保持连接时间)

4.3、HTTP是不保存状态的协议,如何保存用户状态?

HTTP是不保存状态(无状态协议),也就是不对请求和响应之间通信状态保存。Session机制可解决。

在服务端保存 Session 的方法很多,最常用的就是redis

既然 Session 存放在服务器端,那么我们如何实现 Session 跟踪呢?——通过在 Cookie 中附加一个 Session ID 来方式来跟踪

4.4、Cookie的作用是什么?和Session有什么区别?

Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样;

Cookie 一般用来保存用户信息,存在浏览器端;Session 的主要作用就是通过服务端记录用户的状态,保存在服务器端;

 

4.5、HTTP 和 HTTPS 的区别?

(1)端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443;

(2)安全性和资源消耗:HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源;

(3)对称加密:密钥只有一个,加密解密为同一个密码(DES、AES);

(4)非对称加密:密钥成对出现,加密解密使用不同密钥(RSA、DSA)