深入理解TCP/IP协议和网络通信

深入的推导TCP/IP协议的原理:

1、自我想象通信是一个什么样的过程

在先不看TCP/IP协议的情况下,我们先来推导一下现如今的网络通信是怎么实现的呢?

假设现在我们在长沙的一个网吧里面用QQ给身在异地的女朋友发送了一条文本文本信息,这个消息是怎么发送过去的?他那边是怎么接收的?

我的推导大致是:
手指在键盘上打出文本按下回车---->
这些文本被编码应用程序的代码监听到---->
代码通过IO流将这些文本信息write为字节信息---->
操作系统OS---->
操作系统将这些字节信息传送给网卡---->
网卡接收到这些字节信息,将这些字节信息包装,贴上数据类型,并附带好地址,然后转换成特定标识的电信号---->
这种特殊电信号流入传输介质开始了自己的旅行---->
中途这个电信号会经过许多中继站(扩大信号,防止信号衰减)---->
履行完毕电信号通过介质进入异地女盆友的网卡---->
网卡将电信号转换为字节数据包,并查看是不是自己的包裹(不是的话就退回线路,是的话就将这些数据包拆包,分清是什么类型的数据---->
操作系统OS,识别这些字节,传输给QQ(应用程序)---->
通过IO流read这些字节信息---->
转换成他的女朋友能够识别的文本信息,并显示出来

2、TCP/IP协议:

前面已经自己胡乱推导了一下通信是一个怎么样的过程,下面让我们仔细看看TCP/IP协议:
TCP/IP协议(传输控制协议/网际协议)其实是一个很多协议组成的协议簇它是借鉴OSI模型提出来的一个解决不同操作系统、不同芯片构架之间进行一个通信的网络协议,即共识

TCP/IP协议分为四个层面:
1、应用层:(HTTP、FTP、TELNET协议)
2、运输层传输层:(TCP、UDP协议)
3、网络层:(IP协议)
4、数据链路层(硬件设施与网络接口)

那么这四个层面到底都发挥着一个怎么样的作用呢?收先我们需要理解的是,通信其实是一台电脑的应用程序和另一台电脑上的应用程序的通信

那么问题来了:
1、首先,一个数据从一台电脑发送到另一台电脑怎么发?即怎么将这些数据精确发送到接收机上?
2、电脑上收到这些数据之后,电脑上运行着这么多的应用程序或者说是端口,我怎么知道这个数据是发送到哪个端口或者应用程序的?
3、找到对应的应用程序之后,我怎么知道发过来的数据是一个怎么样的数据,是超文本文件,还是远程登陆访问,还是邮件?

那么着四个层面正是为了解决这些问题而提出来的协议!

那么我们来分析这四个层面各有什么样的作用!
数据链路层
是一个对于局域网而言的一个数据传输协议,我们现在大多数都是用的以太网的组网形式,其他局域网的组网形式还有(令牌环网,FDDI等等),在以太网中规定,数据包只能通过一个网卡,发送到另一个网卡,每一个网卡有一个自己对应的MAC地址,如下图所示,在以太网中,在一个局域子网中,路由器将自己收到的数据包以广播的形式发送给此局域子网中的每一个设备的网卡,网卡解析数据包上面的MAC地址看与自己的是否相同,不相同的话就将数据包丢弃,不进行其它操作
在这里插入图片描述
网络层(IP协议,ARP协议,路由协议)

IP协议:
IP地址是用于用于识别网络中的特定计算机而分配的一个特定的地址,现在打开电脑的命令行窗口输入ipconfig会显示一个IPV4地址,意思就是IP的v4版本,用32bit存储,用点加十进制表示,如192.168.0.3此类的一共有2的32次方个地址,有A、B、C、D类之分(即他是用于标识网络中的一个特定计算机而分配的一个特有的IP地址
在网络层引入IP协议,能够区分两台主机是否在同一个网络下,32bit地址分为两个部分,前面一部分是主机的网络地址,后面一部分是主机在子网中对应的地址,随着技术发展,大家还可以在这个命令行窗口看见一个子网掩码,子网掩码和IP地址相互运算,就可以的到计算机的MAC地址

ARP协议:
(百度百科的定义)
即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。其工作原理如下:ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包,最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

路由协议:
(百度百科的定义)
首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过ARP协议查询对应的MAC地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是通过广播形式将数据包发送给接收方。而完成这个路由协议的物理设备就是路由器,路由器扮演着交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。

(ARP协议和路由协议不知到怎么去组织自己的语言,就只能这样了。。)

其实一句话说,网络层就是一个通过网络层找到特定的网络位置,找到特定局域网的路由器,路由器再以广播形式将数据包发送到内部组网中的通信设备上,这样就解决了第一个问题,精确地将一个数据包发送到了目标电脑

运输层和传输层(UDP协议,TCP协议)

现在数据包已经发送到我们地网卡了,现如今我接受的这个数据包要发送给计算机中运行的哪个应用程序上面呢?那么就有UDP协议和TCP协议来帮忙啦

UDP协议: UDP协议为电脑上运行的应用程序或者说端口,都给了一个特定的标识,解析数据包的IP地址和MAC地址之后,操作系统读取数据包端口号找到UDP定义的对应的端口号,这样的话,数据包就找到了目标应用程序,
在这里插入图片描述
TCP协议:

TCP协议其实就是一个更加完善的UDP协议,在UDP协议中,只有接收,但是接收的这个数据包是不是在传输过程会丢失数据呢?完不完整呢?他没有一个确认机制,而TCP协议添加了这个确认收到完整数据包的机制,在读取数据包的时候,如果数据包完整,TCP协议就会发送确认,如果发送端收不到确认,则会再次发送数据包过来,这样就建立了一个稳定的数据传输连接,比UDP协议更加可靠,TCP有一个三次招手建立连接和四次挥手断开连接(这个具体过程还得仔仔细细的研究)
在这里插入图片描述
应用层

数据包已经找到了相应计算机下的特定应用程序,接下来就要读取数据了,那么这个数据怎么来读取呢?它也得遵循一定的协议,在应用层里,规范了很多的数据传输格式也就是不同数据传输的共识比如我给你发过来的是一个邮件,那么就是通过遵循SMTP协议来读取数据,又比如我要远程登陆你的电脑,那么此时在应用层的数据传输协议就会用到TELNET协议,还有传输超文本文件所遵循的HTTP协议等等,根据不同的协议,会对发送过来的数据包及使用不同的数据读取方法,实现与人们的直接交互!

那么对于前面提出的三个问题,数据链路层和网络层解决了第一个问题
运输层和传输层解决了第二个问题,应用层解决了第三个问题! TCP/IP协议从底层到交互,为我们提供了一个用于网络通信的规约!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值