网络架构系列1--TCP/IP详解

2020-01-10  本文已影响0人  倔脾气的皮皮虾啊

不诗意的女程序媛不是好厨师~
转载请注明出处,From李诗雨---https://blog.csdn.net/cjm2484836553/article/details/103930596

网络架构,可以算得上是面试的宠儿了,我也废话不多说,直接上重点。

本节内容思维导图

1.计算机网络分层▲(面试点)

1.1 OSI七层网络模型 和 TCP/IP参考模型

(PS:作为贴心小棉袄的我,已经画了个好看的图,方便大家背诵~)

image

关于OSI模型 和 TCP/IP模型,大家可以这么理解。

OSI七层模型 偏向于一种 理想化的,就好比学术界定义的。而TCP/IP四层模型,则是工业界中实际使用的。

2.IP地址 和 端口号

这里有2个概念需要我们来解释一下,因为在面试只也有可能会提到。

2.1 IP地址

在这里插入图片描述

为了实现网络中不同终端之间的通信,每个终端必须有一个唯一的表示,它就是IP地址

2.2 端口号➹(暗涉一道面试题)

在这里插入图片描述

我们可以把端口号,理解为门牌号。

通过ip地址,我们可以知道我们要访问的是哪台计算机。但是一台计算机可以同时运行多个程序,我们如何知道要访问哪个应用程序呢?这就要通过端口号了。

端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址

在这里插入图片描述

端口号规定为16位,即允许一个IP主机有2的16次方65535个不同的端口。其中:

在Socket使用时,可以用1024~65535的端口号

那这里就隐藏了一个面试题:

既然一个ip主机的端口只有65535个,那为什么可以做到有几百万的socket链接呢?

哈哈,这是因为,我们的通信不是由 端口号 一人决定的呀。我们的通信识别一个通信 是由 5元组 (源IP地址、目标IP地址、源端口号、目标端口 和 协议号)来一起决定的。

在这里插入图片描述

如图:

① 和② 的通信是在两台计算机上进行的。它们的目标端口号相同,都是80。这里可以根据源端口号加以区分。

① 和③ 的目标端口号和源端口号完全相同,但它们各自的源 IP 地址不同。

此外,当 IP 地址和端口号全都一样时,我们还可以通过协议号来区分(TCP 和 UDP)。

3. TCP和UDP

TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。

3.1 TCP的定义和特点

3.2 UDP的定义和特点

应用场景
很多的实时应用(如IP电话、实时视频会议、某些多人同时在线游戏等)要求源主机以很定的速率发送数据,并且允许在网络发生拥塞时候丢失一些数据,但是要求不能有太大的延时,UDP就刚好适合这种要求。

☀ TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。

在说TCP的三次握手和四次挥手之前,我们还有必要来了解一下TCP的报文结构,因为其中的几个字段有助于我们更好的理解三次握手和四次挥手的过程。

4. TCP报文结构

在这里插入图片描述

我属于那种用到什么才学点什么的懒加载式学习,因为学多了我也记不住

所以这里我就挑几个重要字段来记录一下:

​ 需要注意的是:
​ (A)不要将确认序号ack与标志位中的ACK搞混了。
​ (B)确认方ack=发起方seq+1,两端配对。

那这个序列号(seq)和确认号 (ack) 有什么作用呢?

答:TCP中可以通过序列号与确认应答提高可靠性。

image

好,有了这些基础,下面我们就来讲TCP的三次握手了~

5. TCP中的三次握手▲▲▲(面试点)

5.1 描述一下TCP中三次握手的流程

在这里插入图片描述

所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。

【详细的描述】是这样的:

【简单点描述】也就是:

这样就完成TCP三次握手 = 一条TCP连接建立完成 = 可以开始发送数据

注意 1.三次握手期间任何一次未收到对面回复都要重发。

​ 2.最后一个确认报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态。

5.2 为什么TCP建立连接需要三次握手?

为了防止服务器端因为接收了早已失效的连接请求报文从而一直等待客户端请求,从而浪费资源。

再分析具体一点就是:

而采用了三次握手之后,上述问题就不会发生。一切都会按照下面的正确脚步进行:

5.3 TCP三次握手有什么漏洞吗(知道即可)

漏洞:☛ SYN洪泛攻击

☛ 定义:

通过网络服务所在的端口发送大量伪造原地址的攻击报文,发送到服务端,造成服务端上的半开连接队列被占满,从而阻止其他用户进行访问。

☛ 原理:

攻击者客户端利用伪造的IP地址向服务端发出请求(第一次握手),而服务端的响应(第二次握手)的报文将永远发送不到真实的客户端,服务端在等待客户端的第三次握手(永远都不会有的),服务端在等待这种半开的连接过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。

☛ 解决方案:

无效连接监控释放

延缓TCB分配方法

防火墙

6.TCP中的四次挥手(面试点▲)

6.1 描述一下TCP中四次挥手的流程

在这里插入图片描述

四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。

注意:可以是客户端先发出中断,也可以是服务器端先发出中断。甚至是两方同时发出中断的情况也是有的!

【详细的描述】是这样的:

【简单点描述】也就是:

6.2 为什么TCP释放连接需要四次挥手?

为了保证双方都能通知对方“需要释放连接”,即在释放连接后都无法接收或发送消息给对方

6.3 为什么建立连接是三次握手,而关闭连接却是四次挥手呢,为什么2、3两次不能合并呢?

这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

7.TCP协议中的窗口机制(拓展,了解一下即可)

在这里插入图片描述

滑动窗口

发送方和接收方都会维护一个数据帧的序列,这个序列被称作窗口。

发送方的窗口大小由接收方确认。

目的

1.确保数据不丢失

​ 如果发送的数据丢失了可以重新发。

2.控制发送速度

​ 控制发送速度,以免接收方的缓存不够大导致溢出,同时控制流量也可以避免网络拥塞。

嗯呐,学习中,如有不正确的地方,希望可以一起讨论呀~

上一篇下一篇

猜你喜欢

热点阅读