TCP/IP协议,七层OSI模型,scoket浅解

TCP/IP协议,七层OSI模型,scoket浅解

什么是tcp/ip协议:互联网协议套件(英语:Internet Protocol Suite,缩写IPS)是一个网络通信模型,以及一整个网络传输协议家族,为网际网络的基础通信架构。它常被通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。因为该协议家族的两个核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准。由于在网络通讯协议普遍采用分层的结构,当多个层次的协议共同工作时,类似计算机科学中的堆栈,因此又被称为TCP/IP协议栈(英语:TCP/IP Protocol Stack) 。这些协议最早发源于美国国防部(缩写为DoD)的ARPA网项目,因此也被称作DoD模型(DoD Model)。这个协议族由互联网工程任务组负责维护。

TCP/IP提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。协议族下的各种协议,依其功能不同,被分别归属到这四个层次结构之中,常被视为是简化的七层OSI模型。(来自维基百科的定义)
简单来说TCP/IP协议就是是网络通信的规则,他规定了电脑,手机等电子设备怎么连接网络如何在网络中发送,接收数据。没有TCP/IP协议你就无法在互联网中遨游。

上面也提到了TCP/IP协议是七层OSI模型的简化那么OSI是什么呢:OSI是开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写:OSI;简称为OSI模型)是一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。定义于ISO/IEC 7498-1。(来自维基百科的定义)
根据建议X.200,OSI将计算机网络体系结构划分为以下七层,标有1~7,第1层在底部。 现“OSI/RM”是英文“Open Systems Interconnection Reference Model”的缩写。
OSI七层模型为:
第七层应用层(Application Layer):提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3.HTML.等。

第六层表达层(Presentation Layer):把数据转换为能与接收者的系统格式兼容并适合传输的格式。

第五层会话层(Session Layer):负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。

第四层传输层(Transport Layer):把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP)等。

第三层网络层(Network Layer):决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络数据。例如:互联网协议(IP)等。

第二层数据链路层(Data Link Layer):负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成帧。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾
(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。

第一层物理层(Physical Layer):在局部局域网上传送数据帧(data frame),它负责管理计算机通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等。
这就是OSI七层模型网络互联的标准框架而在现实使用时我们使用的是TCP/IP协议的四层简化模型;有人可能会问为什么要七层或者四层干嘛不就在一层搞定呢;这就是像盖高楼这样一件复杂的事情;如果你想直接所有的事情同步做土建,电气,绿化等等全部一起做的话要协调好他们的工作是非常困难的事情搞不好全乱套得不偿失,如果我们分步把复杂的事情分成一步步简单的事情那么处理起来就简单多了也提高了效率。
TCP/IP通常将软件通信过程抽象化为四个抽象层也就是 TCP/IP 协议族按层次分别分为应用层、传输层、网络层和网络接口层(数据链路层+物理层)。
在这里插入图片描述
网络通信就好比送快递,商品(数据)外面的一层层包裹就是各种协议,协议包含了商品信息、收货地址、收件人、联系方式等,然后还需要货车、中转站、配送站、快递员,商品才能最终到达用户手中。一般情况下快递送达大型的中转站然后按照你的地址发往你城市的中转站然后发送到你附近配送站然后你附近配送站的快递员将快递送给你通过电话找到你;这里货车就是物理层介质,中转站就是现实中大大小小的网关,配送站就是路由器,收货地址就是IP地址,联系方式就是mac物理地址。
在这里插入图片描述

  1. 应用层是离用户最近的一层;应用层定义了各种各样的协议来规范数据格式,主要协议有:HTTP、FTP、SMTP、Telnet、NFS、RIP 等等。例如有了HTTP以及https协议互联网上可以传输的不仅只有文字,还有包括图片等各种多媒体的网页。由于数据传输过程中都是字节流;如果没有应用层协议进行对数据的编码,解码互联网上的数据将特别单调且不能很好的被程序识别,操作性差;所以应用层的主要工作就是定义数据格式并按照对应的协议解读数据并将要发送的按照协议数据打包进传输层。

  2. 传输层接收应用层数据包;但数据包是从一个主机的某个应用程序发出,然后由对方主机的应用程序接收。而每台电脑都有可能同时运行着很多个应用程序,所以当数据包被发送到主机上以后,是无法确定哪个应用程序要接收这个包。
    传输层引入了UDP协议来解决这个问题,为了给每个应用程序标识身份,UDP协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号,并且规定网络中传输的数据包必须加上端口信息。 这样,当数据包到达主机以后,就可以根据端口号找到对应的应用程序了。UDP定义的数据包就叫做UDP数据包,结构如下所示:
    首部(8个字节)+数据(最大为65527个字节)
    UDP协议比较简单,实现容易,但它没有确认机制, 数据包一旦发出,无法知道对方是否收到,因此可靠性较差。

    TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。UDP(用户数据报协议)是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。TCP 协议提到的所谓字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。UDP数据包:首部(20个字节)+数据(原则上没有限制但一般小于ip层字节)
    简单来说TCP就是有确认机制的UDP协议;把应用层传来的数据切割成一个个数据包并编号;每发出一个数据包都要求确认,如果一个包丢失就收不到确认;发送方需重发这个包;tcp传输数据有三次握手四次分手之说(所以我总感觉tcp是渣男);在收发数据前,必须和对方建立可靠的连接。
    第一次握手
    SYN置为1,随机产生一个值seq=j,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认
    第二次握手
    服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=k,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
    第三次握手
    客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=k+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态(在握手过程中不含数据三次握手成功之后客户端服务器才开始传输数据)其实简单的说就是客户端首先发包给服务器告诉服务器我要传送数据,服务器收到后回复一个包给客户端;客服端检查该包与标志若可以传输数据则客户端再发一个包给服务器;双方可以传输数据。
    在这里插入图片描述
    因为tcp是全双工的传输所有当停止传输时需要每个方向都关闭收发所以需要进行四次分手;当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
    在这里插入图片描述

  3. 网络层定义IP地址,确认主机所在的网络位置,并通过IP进行MAC寻址,对外网数据包进行路由转发;
    数据通过传输层端口可以将一个应用程序数据准确的给另一台主机的应用程序;但如果两台主机如何确定双方主机的位置怎样将传输到找当主机位置是一个问题;由此引入ip地址
    IP地址目前有两个版本,分别是IPv4和IPv6(128位),IPv4是一个32位的地址,常采用4个十进制数字表示如:192.168.1.1/24表示子网掩码为24位前24位为网络号,后八位为主机号;其中主机号全为0的是网络地址,主机号全为1的为直接广播地址;此子网最多可以有254台计算机(减去子网的网络地址,直接广播地址)。如果两个IP地址在同一个子网内,则网络地址一定相同。
    ARP协议
    即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。其工作原理如下:
    ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包,最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。(因特网需要使用以太网当底层;以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据 32 位的 IP 地址。内核必须知道目的端的硬件地址才能发送数据。交换机只能处理mac路由器只能处理IP这就是为什么必须找mac地址的原因)

    RARP(反向地址转换协议)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。局域网网关路由器中存有一个表以映射 MAC 和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器。”
    路由协议
    通过ARP协议的工作原理可以发现,ARP的MAC寻址还是局限在同一个子网中,因此网络层引入了路由协议,首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过ARP协议查询对应的MAC地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是通过广播形式将数据包发送给接收方。
    而完成这个路由协议的物理设备就是路由器,在错综复杂的网络世界里,路由器扮演者交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。
    在网络层被包装的数据包就叫IP数据包,IPv4数据包的结构如下图所示
    首部(20字节)+数据(最大65515字节)网络层的主要工作是定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由。

  4. 网络接口层
    常见协议: Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。负责从上层接收 IP 数据包并通过网络发送,或者从网络上接收物理帧,抽出 IP 数据包,交给 IP 层。这层包括主机连接到物理网络所需要的硬件以及传送数据的协议。其中比较出名的是以太网协议。以太网规定一组电信号就是一个数据包,一个数据包被称为一帧, 制定这个规则的协议就是以太网协议。以太网包
    首部(14字节)+数据(46-1500字节)+尾部(4字节)
    整个数据帧由首部、数据和尾部三部分组成,首部固定为14个字节,包含了目标MAC地址、源MAC地址和类型;数据最短为46个字节,最长为1500个字节,如果需要传输的数据很长,就必须分割成多个帧进行发送;尾部固定为4个字节,表示数据帧校验序列,用于确定数据包在传输过程中是否损坏。因此,以太网协议通过对电信号进行分组并形成数据帧,然后通过物理介质把数据帧发送给接收方。以太网如何来识接收方的身份呢? 这就用到了网卡;数据包必须是从一块网卡传送到另一块网卡。两台电脑(主机)之间是通过网卡来进行发送和接收数据的。每个网卡都有一个独特的地址,也就是 MAC 地址。以太网在子网内以广播的形式发送数据把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。。
    光有 MAC 地址并不能让不同子网的两台主机之间相互通信,如果两台主机不在同一个子网,以太网协议就没辙了。这就要通过网络层来区分每台主机所在的网络是哪个子网。如果在同一个子网,就用广播发送数据,否则就用路由发送。这就导致了网络层的诞生
    物理介质就是把连接各个主机,设备连接起来的物理介质,常见的有光纤、双绞线,以及无线电波,它决定了电信号(0和1)的传输方式,物理介质的不同决定了电信号的传输带宽(固定时间内传播数据包的多少)、速率、传输距离以及抗干扰性等等。
    TCP/IP协议栈分为四层,每一层都由特定的协议与对方进行通信,而协议之间的通信最终都要转化为 0 和 1 的电信号,通过物理介质进行传输才能到达对方的电脑,因此物理介质是网络通信的基石。
    每一层在传播时都要加上自己一些首部信息(有的还需要尾部信息)在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。下一层的又会将自己的协议,信息当作首部上一层的包当做数据形成一个新的包;传输层首部主要为源端口,目标端口;网络层首部主要为源IP,目标ip,网络接口层首部主要为源mac,目标mac;如上文发送时每一层加上自己的首部最终通过物理介质发送到目标主机;目标主机通过由下层往上层不断解包去除首部最终应用程序得到数据。

  5. socket 是网络编程中的概念,是 TCP/IP 协议栈在操作系统中的代理,为应用层提供服务。socket有端口,IP但它本身不属于tco/ip协议;实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。通过Socket,我们才能使用TCP/IP协议。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。
    TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”
    本文作者为夏雨滴荷竹,转载需著名原文链接,谢谢。
    原文链接为 https://blog.csdn.net/qq_44929785/article/details/98943231

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值