TCP/IP协议

目录

一、集线器的诞生

二、数据链路层

三、网络层

四、传输层

五、应用层

5.1应用层包含的协议以及各个协议的作用

六、三次握手

七、四次挥手


一、集线器的诞生

   在通信的原始时代,一台计算机A在独立通信不与任何电脑通信;直到有一天,这台计算机想与另一台计算机B建立通信,于是两台计算机各开了一个网口,并且两者之间插了一根网线开始了通信。后来,有一个新伙伴C加入了,但聪明的你们很快发现,可以每个人开两个网口,一共用三根网线就可以彼此相连。但随着越来越多的计算机想来加入你们之间的通信,你会发现身上开的网口实在使太多了,而且网线密密麻麻(而实际一台电脑根本开不了这么多网口)

        于是你们发明了一个中间设备,你们将网线都插入到这个设备上,由这个设备做转发,就可以彼此之间通信了,本质上和原来一样,只不过网口的数量和网线的数量减少了,不用再那么混乱。这台中间设备的名称被称为集线器,它仅仅是将电信号转发到所有广播,并不做任何处理,因此集线器属于一个物理层面的设备。

       由于转发到看所有出口,那么计算机面临着一个问题:就是如何判断数据包是不是发送给自己的呢? 首先你要给所有连接到集线器的设备都起一个全局唯一的名字作为标识,把这个高端的名字称为MAC地址。你的MAC地址是aa-aa-aa-aa-aa-aa,你的伙伴B的MAC地址为bb-bb-bb-bb-bb-bb,以此类推,不重复就好。这样,A在发送数据包给B时,只要在头部拼接一个这样结构的数据就可以了;B在收到数据包后,根据头部的目标MAC地址信息,判断这个数据包是不是发送给自己的,是就收下,不是就丢弃。

       虽然集线器使整个布局干净不少,但原来我只想发送消息给电脑B,现在却要发送给连接到集线器中的所有电脑,这样既不安全又不节省网络资源;

二、数据链路层

       如果把这个集线器弄的更智能一些,只发给目标MAC地址指向的那台电脑就好了,于是就有了交换机的诞生。因为交换机属于集线器的升级版,所以被定义在了数据链路层。 ​ 交换机内部维护着一张MAC地址表,记录着每一个MAC地址的设备,连接在其哪一个端口上。假如你仍然要发送给B一个数据包,数据包到达交换机时,发现目标机器B的MAC地址bb-bb-bb-bb-bb-bb映射到了端口1上,于是把数据从1号端口发给了B。给通过这样传输方式而组成小范围的网络,起名叫做以太网。

       那么在最初的时候,MAC地址表是空的,是怎么逐步建立起来的呢? 假如在MAC地址表为空时,你给B发送了以下数据:

由于这个包是从端口4进入的交换机,所以此时交换机就可以在MAC地址表记录第一条数据:

MAC:aa-aa-aa-aa-aa-aa 端口:4

交换机看目标MAC地址(bb-bb-bb-bb-bb-bb)在地址表中并没有映射关系,于是将此包发送给了所有端口,也发送给了所有计算机;之后,只有计算机B收到了发送给自己的数据包,接着做出了响应,响应数据从端口1进入交换机,于是交换机此时在地址表中更新了第二条数据:

MAC:bb-bb-bb-bb-bb-bb 端口:1

经过该网络中的计算机不断通信,交换机最终将MAC地址表建立完毕;

随着计算机数量的逐渐增多,交换机的端口存在了不够用的问题,但聪明的你发现:只要将多个交换机连接在一起,这个问题就迎刃而解。在计算机数量少的时候还好,但很遗憾,若要想让几千、几万、几十万台计算机通信又该如何解决呢?

数据链路层作用:处理与传输媒介的物理接口细节

三、网络层

       交换机已经无法记录如此庞大的映射关系了,此时你发现问题的根本在于不知道会有多少设备不断地连接进来,从而使得MAC地址表越来越大。那我可不可以接入一个新的设备,而这个设备就根电脑一样有着自己独立的MAC地址,而且同时还能帮我把数据包做一次转发呢? ​

       这个设备就是路由器,它的功能就是作为一台独立且拥有MAC地址的设备,并且可以帮我把数据包做一次转发,因此被定义在了网络层。 ​

注意:路由器的每一个端口都有独立的MAC地址

       那么,又产生了一个问题:如何做到,把发送的数据包统统先发送给路由器?

       MAC地址具有唯一性,如果你希望将目标MAC地址为FFFF-FFFF-F?开头,统一从路由器出去发送给某一群设备,这就得需要在某一子网下买一个厂商设备,并且日后这个网络的结构不能轻易改变,这显然是不现实的。 ​

       所以,你发明了一个新的地址,给每一台计算机一个32位的编号,如:1100000000 10101000 00000000 00000001 你还觉得不清晰,就把它分成四个部分,中间用点相连:11000000.10101000.00000000.00000001;你依旧觉得不清晰,想着把它转换成10进制:192.168.0.1;最后你给了这个地址一个名字,IP地址就此诞生。

       ​ 现在每一台电脑同时有了自己的MAC地址,又有自己的IP地址,只不过IP地址是软件层面的,可以随时修改,MAC地址一般是无法修改的;有一个可以随时修改的IP地址,就可以根据你规划的网络拓扑自行调整。路由器中的路由表用于映射IP地址(段)和它的端口;

       路由器是专门负责寻找IP地址的,那么报文交给路由器之后,路由器又是怎么把数据包准确转发给指定设备的呢? 比如一台计算机A的IP地址为:192.168.1.1/24 ,另一台计算机B的IP地址为:192.168.2.1/24;两者之间想要进行通信,但很显而易见的是两台计算机的IP不在同一个子网内(子网:前24位相同的IP地址即属于一个子网),所以我们要去路由器各自连接A、B两台计算机的接口上,去配置各自在同一子网内的网关;例如:路由器的GigabitEthernet0/0/0口连接的是计算机A,而路由器的另一个接口GigabitEthernet0/0/1连接的是另一个计算机B,分别在路由器的接口上配置网关192.168.1.100与192.168.2.100,这样计算机A和计算机B就可以实现通信了;

       但如果发送数据包的数据链路层需要知道MAC地址,但我只知道IP地址怎么办?很简单,在网络层我们需要把IP地址对应的MAC地址找到,就得应用ARP协议:起初计算机内拥有一张ARP表是空的,计算机A为了找到计算机B的MAC地址,将会广播一条ARP请求,B收到请求后,带上自己的MAC地址给A一个响应,此时A更新了自己的ARP表,这样通过大家不断广播ARP请求,最终所有的计算机就都将ARP缓存表更新完整; 注:配置网关必须得与各自计算机处于同一网段中(比如计算机A的网段属于:192.168.1.0/24,而计算机B的网段属于:192.168.2.0/24)

网络层作用:负责网络中数据包的传送;

Internet控制消息协议(ICMP)

       ICMP协议是网络层的一个重要协议,用来在网络设备间传递各种差错和控制信息,并对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。

四、传输层

       传输层的协议,解决了端到端可靠性问题,能确保数据可靠地到达目的地,甚至能保证数据按照正确的顺序到达目的地。传输层的主要功能大致如下:

(1)为端到端连接提供传输服务;

(2)这种传输服务分为可靠和不可靠的,其中TCP是典型的可靠传输,而UDP则是不可靠传输;

(3)为端到端连接提供流量控制、差错控制、QoS(Quality of Service)服务质量等管理服务。

传输层主要有两个性质不同的协议:TCP传输控制协议和UDP用户数据报协议。

TCP协议是一个面向连接的、可靠的传输协议,它提供一种可靠的字节流,能保证数据完整、无损并且按顺序到达。TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。另外,TCP试图将数据按照规定的顺序发送。

UDP协议是一个面向无连接的数据报协议,是一个“尽力传递”和“不可靠”协议,不会对数据包是否已经到达目的地进行检查,并且不保证数据包按顺序到达。

总体来说,TCP协议传输效率低,但可靠性强;UDP协议传输效率高,但可靠性略低,适用于传输可靠性要求不高、体量小的数据(例如微信聊天数据)。

五、应用层

       应用层包括所有和应用程序协同工作,并利用基础网络交换应用程序的业务数据的协议。一些特定的程序被认为运行在这个层上,该层协议所提供的服务能直接支持用户应用。应用层协议包括HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)、SSH(安全远程登陆)、DNS(域名解析)以及许多其他协议。

         作用:应用层是用来读取来自传输层的数据或将数据传输写入传输层。

5.1应用层包含的协议以及各个协议的作用

1.超文本传输协议 (HTTP)
       该协议是万维网的基础,用于在不同系统上交换超文本,是一种请求-响应协议。

       客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。因为HTTP协议相对简单,所以HTTP服务器的程序规模小,因而通信速度很快。HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。注:http是无状态无连接的。

2.文件传输协议 (FTP)

       用于在两个主机之间共享或传输文件。运行 FTP 应用程序的主机充当 FTP 服务器,而另一台主机充当 FTP 客户端。

       请求文件共享的客户端主机需要来自服务器的身份验证才能访问数据,一旦服务器授权了这个文件,它就可以从服务器访问任何类型的文件,发送或接收文件。

3.简单邮件传输协议 (SMTP)

      SMTP 用于发送电子邮件。我们使用 SMTP 来配置发送电子邮件的主机。

4.域名服务器 (DNS)

       当我们浏览任何网页时,它会将 DNS 查询发送到其 DNS 服务器以将 IP 地址与名称映射。获得地址后,将使用 IP 地址构建 HTTP 会话。

5.动态主机配置协议 (DHCP)

       任何网络中的主机都需要一个 IP 地址才能与网络中的其他设备进行通信。它通过手动配置或使用动态主机配置协议 (DHCP) 获取此地址。

六、三次握手

第一次握手

当客户端向服务端发起连接请求时,客户端会发送同步序列标号SYN到服务端,在这里我们设SYN为x,等待服务端确认,这时客户端的状态为SYN_SENT。

第二次握手

当服务端收到客户端发送的SYN(x)后,服务端要做的是确认客户端发送过来的SYN,在这里服务端发送确认包ACK,这里的ACK为x+1,意思就是“我收到了你发送的SYN了”,同时,服务端也会向客户端发送一个SYN包,这里我们设SYN为y。这时服务端的状态为SYN_RECV。即:服务端发送SYN和ACK两个包。

第三次握手

客户端收到服务端发送的SYN(y)和ACK(x+1)包后,知道了之前的同步序列号x数据已经发送成功了,客户端状态变为ESTABLISH,需向服务端发送确认包ACK,“我也收到你发送的SYN了,我这就给你发个确认过去,然后我们就能开始通信了”,这里的ACK为y+1,服务端端接收到ACK后,服务端的状态变为ESTABLISH,即TCP连接成功。

七、四次挥手

当A端和B端要断开连接时,需要四次挥手。

断开连接请求可以由客户端发出,也可以由服务器端发出,在这里我们称A端向B端请求断开连接。

第一次挥手

A端向B端请求断开连接时会向B端发送一个带有FIN标记的报文段,这里的FIN是FINSH(结束)的意思。

第二次挥手

B端收到A发送的FIN后,B段现在可能现在还有数据没有传完,所以B端并不会马上向A端发送FIN,而是先发送一个确认序号ACK,意思是说“你发的断开连接请求我收到了,但是我现在还有数据没有发完,请稍等一下”。

第三次挥手

当B端的数据完全发送完毕,那么此时B端就可以断开连接了,此时B端向A端发送FIN序号,意思是这次可以断开连接了。

第四次挥手

A端收到B端发送的FIN后,会向B端发送确认ACK,然后经过两个MSL时长后断开连接。 (MSL:最大报文段生存时间,两个MSL是报文段发送和接收的最长时间)

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值