1. 网络分层
OSI 七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。
2. TCP/IP 四层模型
TCP/IP 四层模型:应用层(Application)、传输层(Transport)、网络层(Network)、 数据链路层(Data Link)。
1、最上面的就是应用层了,这里面有HTTP,FTP,等等我们熟悉的协议。
TCP/IP的分层中,将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现。
TCP/IP应用的架构绝大多数属于客户端/服务器模型。
应用层的主要应用场景:
浏览器和服务端之间通信所用的协议是HTTP协议,所传输数据的主要格式为HTML。
发送电子邮件时用到的协议是SMTP。
文件传输(FTP)
远程登录常用TELNET与SSH两种协议。远程登录是指登录到远程的计算机上,使那台计算机上的程序得以运行的一种功能。
网络管理(SNMP)
2、第二层则是传输层,著名的TCP和UDP协议就在这个层次。
传输层最主要的功能是能够让应用程序之间实现通信,并且定义了两种服务质量不同的协议,即:传输控制协议TCP和用户数据报协议UDP。
TCP协议是一个面向连接的、可靠的协议。它可以保证两端通信主机之间的通信可达。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据.
UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
UDP常用在分组数据较少或多播、广播通信以及视频通信等多媒体领域(即时通信)。
3、第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标。
也称作互联网层,是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。
网络层定义了分组格式和协议,即IP协议(Internet Protocol)。另外的还有ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
IP是一种网络层协议,提供的是一种不可靠的服务,它只是尽可能快地把分组从一端送到另一端,但是并不提供任何可靠性保证。同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。
IGMP是Internet组管理协议。它用来把一个UDP数据报多播到多个主机。
4、第四层是叫数据链路层,也称作网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。链路层为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。
3.常见问题
1、TCP/IP协议通信的过程
通信的过程其实就对应着数据装包与拆包的过程。装包的过程,数据发送方每层不断地封装首部,添加一些信息用于传输,确保能传输到目的地。拆包的过程,数据接收方每层不断地拆除首部,得到最终传输的数据。(图例)

每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。
2、如何建立TCP/IP连接?
TCP传输控制协议,是一个面向连接的协议。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
TCP报文格式(图)

(1)序列号:Seq序号,用来标识数据包,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即SYN、ACK、PSH、RST、URG、FIN
1)SYN:发起一个请求。 2)ACK:确认序号有效(表示对请求的响应)。
3)URG:紧急指针(urgent pointer)有效。 4)PSH:接收方应该尽快将这个报文交给应用层。
5)RST:重置连接。 6)FIN:释放一个连接。
需要注意的是:
(A)不要将确认序号Ack与标志位中的ACK搞混了。
(B)确认方Ack=发起方Seq+1,两端配对。

第一次握手:客户端发送一个TCP标志位SYN=1,ACK=0的数据包给服务端,并随机会产生一个Seq=J.当服务端接收到这个数据后,服务端由SYN=1可知客户端是想要建立连接;
第二次握手:服务端要对客户端的联机请求进行确认,向客户端发送应答号ACK=1、SYN=1 确认号Ack=J+1,此值是客户端的序列号加1,还会产生一个随机的序列号Seq=K,这样就告诉客户端可以进行连接;
第三次握手:客户端收到数据后检查Ack是否为J+1,以及标志位ACK的值是否为1,若为1,则会发送ACK=1、确认号码Ack=K+1,告诉服务端,你的请求连接被确认,连接可以建立,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
3、为什么要三次握手?
为了防止已失效的连接请求报文段突然又传送到了服务端,从而产生错误。
三次握手是在安全可靠的基础上,握手次数最少的方案。两次握手并不能保证可靠性。四次握手又浪费了效率,当然,有的需要更高安全性的地方,是可以有N次握手协议的,但那是特殊情况。
4、IP包如何路由至目标地址?
IP包有固定的报文格式,报头有所需要参数。如:源端口、目标端口、确认序号和标志域等。
5、详细介绍IP、TCP和DNS。
IP协议:IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个重要的条件是IP地址,和MAC地址。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的,除去人为因素外不可能重复。
TCP协议:如果说IP协议是找到对方的详细地址。那么TCP协议就是把安全的把东西带给对方。各有分工,互不冲突。
按层次分,TCP属于传输层,提供可靠的字节流服务。所谓的字节流服务是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。总之,TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。
DNS:(Domain names System)
和HTTP协议一样是处于应用层的服务,提供域名到IP地址之间的解析服务。互联网之间是通过IP地址通信的,但是IP地址并不符合认得记忆习惯,人喜欢记忆有意义的字词。所以DNS服务就为了解决这个问题而生的。
6. TCP 与 UDP 区别总结:
UDP
-
UDP 头结构:来源端口、目的端口、长度域、校验和
-
特点:不可靠、无序、面向报文、速度快、轻量
-
适用场景:适用于即时通讯、视频通话等
-
应用:DHCP、DNS、QUCI、VXLAN、GTP-U、TFTP、SNMP
TCP
-
TCP 头结构:来源端口、目的端口、序号、确认序号、SYN/ACK 等状态位、窗口大小、校验和、紧急指针
-
特点:面向字节流、有拥塞和流量控制、可靠、有序、速度慢、较重量,通过滑动窗口实现流量控制、用塞控制
-
适用场景:文件传输、浏览器等
-
应用:HTTP、HTTPS、RTMP、FTP、SMTP、POP3
-
三次握手:
6. HTTP和HTTPS的区别
HTTP
-
超文本传输协议,明文传输,默认 80 端口
-
POST 和 GET:Get 参数放在 url 中;Post 参数放在 request Body 中
-
访问网页过程:DNS 域名解析、TCP 三次握手建立连接、发起 HTTP 请求
HTTPS
-
默认 443 端口,使用 SSL 协议对 HTTP 传输数据进行了加密,安全
-
加密过程:Client/Server 通过非对称加密生成密钥,然后用这个密钥去对称加密传输数据
7. http 的 get 和 post 的区别
http 是应用层的协议,底层基于 TCP/IP 协议,所以本质上,get 和 post 请求都是 TCP 请求。所以二者的区别都是体现在应用层上(HTTP 的规定和浏览器/服务器 的限制)
1.参数的传输方式:GET 参数通过 URL 传递,POST 放在 Request body 中。
2.GET 请求在 URL 中传送的参数是有长度限制的,而 POST 没有。
3.对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器 响应 200(返回数据);而对于 POST,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据)。不过要注意, 并不是所有浏览器都会在 POST 中发送两次包,比如火狐
4.对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制。
5.GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感 信息。
6.GET 请求只能进行 url 编码,而 POST 支持多种编码方式。
7.GET 在浏览器回退时是无害的,而 POST 会再次提交请求。
8.GET 产生的 URL 地址可以被 Bookmark,而 POST 不可以。
9.GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。
8. socket 和 http 的区别:
Http 协议:简单的对象访问协议,对应于应用层。Http 协议是基于 TCP 链接的。
tcp 协议:对应于传输层
ip 协议:对应于网络层
TCP/IP 是传输层协议,主要解决数据如何在网络中传输;而 Http 是应用层协议,
主要解决如何包装数据。
Socket是对 TCP/IP协议的封装,
Socket 本身并不是协议,而是一个调用接口(API),
通过 Socket,我们才能使用 TCP/IP 协议。
Http 连接:http 连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。
socket 连接:socket 连接及时所谓的长连接,理论上客户端和服务端一旦建立连 接,则不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机 down 了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该链接已释放网络资源。所以当一个 socket 连接中没有数据的传输,那么为了位置连续的连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。
6万+

被折叠的 条评论
为什么被折叠?



