博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP/IP协议原理【转载】
阅读量:5049 次
发布时间:2019-06-12

本文共 3581 字,大约阅读时间需要 11 分钟。

前述

       各种L2数据网具有不同的通信协议与帧结构,其网络节点设备可以是各种类型的数据交换机(X.25、FR、Ethernet和ATM等分组交换机);而L3数据网(IP网或internet)具有统一的TCP/IP通信协议和分组结构,全网采用统一格式的IP地址,节点设备统一采用面向无连接的路由器。为便于理解,我们可以将L3数据网简单地理解为构建在L2数据网平台上的一个路由器网。

1 internet概述

internet是一个由众多网络互联而成的世界范围内的计算机网络。从通信的角度来看,internet是一个以TCP/IP统一的标准,将世界范围内多个国家的部门和机构的两层计算机子网联接而成的三层数据网。从资源角度来看,internet是一个集各领域、各学科、各种应用等各种资源为一体的资源数据网。

internet具有以下特点:

(1) TCP/IP是internet的基础与核心,依靠TCP/IP协议实现了网络的互联;

(2) 用户使用internet时无需了解网络底层(物理层和链路层)的结构,十分方便;

(3) 随着internet主干线路与接入带宽的不断拓展,internet最终将取代现有的电话网、数据网和有线电视网,成为三网合一的综合多媒体业务网;

(4) 世界上没有对internet上通信进行统一管理的机构,internet上的许多服务和功能都是由用户开发、经营和管理的,因此从经营角度看internet是一个用户的网络。

2 TCP/IP 协议

internet实现互联的关键是TCP/IP协议。在internet内部,计算机之间互相发送信息包进行通信,TCP/IP协议对这种信息包的传输方式作了具体的规定。

2.1 IP协议(因特网协议)

2.1.1 IP协议概述

IP协议定义在OSI-RM第三层———网络层,是internet最重要的协议。在IP协议中规定了在internet上进行通信时应遵守的规则,例如IP数据包的组成、路由器如何将IP数据包送到目的主机等。

各种物理网络在链路层(二层)所传输的基本单元为帧(MAC帧),其帧格式随物理网络而异,各物理网络的物理地址(MAC地址)也随物理网络而异。IP协议的作用就是向传输层(TCP层)提供统一的IP包,即将各种不同类型的MAC帧转换为统一的IP包,并将MAC帧的物理地址变换为全网统一的逻辑地址(IP地址)。这样,这些不同物理网络MAC帧的差异对上层而言就不复存在了。正因为这一转换,才实现了不同类型物理网络的互联。

IP协议面向无连接,IP网中的节点路由器根据每个IP包的包头IP地址进行寻址,这样同一个主机发出的属于同一报文的IP包可能会经过不同的路径到达目的主机。

2.1.2 IP协议的功能

IP协议主要具有以下几部分功能:

(1) 寻址

这一功能将在下一节中作为专题进行讨论。

(2) 路由选择

路由选择是以单个IP数据包为基础的,概括而言是确定某个IP数据包到达目的主机需经过哪些路由器。路由选择可以由源主机决定,也可以由IP数据包所途经的路由器决定。

在IP协议中,路由选择依靠路由表进行。在IP网上的主机和路由器中均保存了一张路由表,路由表指明下一个路由器(或目的主机)的IP地址。路由表由目的主机地址和去往目的主机的路径两部分组成。其中,去往目的主机的路径通常是下一个路由器的地址,也可是目的主机的IP地址。

(3) 分段与组装

IP数据包在实际传送过程中所经过的物理网络帧的最大长度可能不同,当长IP数据包需通过短帧子网时,需对IP数据包进行分段与组装。

IP协议实现分段与组装的方法是给每个IP数据包分配一个惟一的标志符,且报头部分还有与分段与组装相关的分段标记和位移。IP数据包在分段时,每一段需包含原有的标志符。为了提高效率、减轻路由器的负担,重新组装工作由目的主机来完成。

2.2 TCP协议(传输控制协议)

2.2.1 TCP协议概述

TCP协议位于OSI-RM第四层———传输层,是一个端对端、面向连接的协议。该协议弥补了IP协议的某些不足,其中比较突出的有两个方面:一是TCP协议能够保证在IP数据包丢失时进行重发,能够删去重复收到的IP数据包,还能保证准确地按原发送端的发送顺序重新组装数据;二是TCP协议能区别属于同一应用报文的一组IP数据包,并能鉴别应用报文的性质。这一功能使得某些具有四层协议功能的高端路由器可以对IP数据包进行流量、优先级、安全管理、负荷分配和复用等智能控制。

2.2.2 TCP协议的功能

(1) 保证传输的可靠性

TCP协议是面向连接的。所谓连接,是指在进行通信之前,通信双方必须建立连接才能进行通信,而在通信结束后终止其连接。相对于面向无连接的IP协议而言,TCP协议具有高度的可靠性。

当目的主机接收到由源主机发来的IP包后,目的主机将向源主机回送一个确认消息,这是依靠目的主机的TCP协议来完成的。TCP协议中有一个重传记时器(RTO),当源主机发送IP包即开始记时。如在超时之前收到确认信号,则记时器回零;如果记时器超时,则说明该IP包已丢失,源主机应进行重传。对于重传记时器,确定合适的记时时长是十分重要的,它由往返时间来决定。TCP协议能够根据不同情况自动调节记时时长。

需要说明的是,TCP协议所建立的连接是端到端的连接,即源主机与目的主机间的连接。internet中每个转接节点(路由器)对TCP协议段透明传输。

总之,IP协议不提供差错报告和差错纠正机制,而TCP协议向应用层提供了面向连接的服务,以确保网络上所传送的数据包被完整、正确、可靠地接收。一旦数据有损伤或丢失,则由TCP协议负责重传,应用层不参与解决。

(2) 提供部分应用层信息的功能

在TCP协议之上是应用层协议(如FTP、SMTP、TELNET等),最终需依靠它们实现主机间的通信。TCP协议携带了部分应用层信息,可用来区别同一报文数据流的一组IP包及其性质。

TCP协议对这些应用层协议规定了整数标志符,称为端口序号。被规定的端口序号成为保留端口,其值在0~1 023范围内(如端口序号23,用于远程终端服务)。此外还有自由端口序号,供个人程序使用,或者用来区分两台主机间相同应用层协议的多个通信,即两台主机间复用多个用户会话连接。

进行通信的每台主机的每个用户会话连接都有一个插口序号,它由主机的IP地址和端口序号组成。在internet中插口序号是惟一的,一对插口序号惟一地标识了一个端口的连接(发端插口序号=源主机IP地址+源端口序号,收端插口序号=目的主机IP地址+目的端口序号)。利用插口序号可在目的主机中区分不同源主机对同一个目的主机相同端口序号的多个用户会话连接。

在TCP协议段的头部各域中具有码位项。其中,SYN码位为应用数据流的开始位(当SYN置1,表示该IP数据包为某一应用报文的第一份数据包),FIN码位为应用数据流的结束位(当FIN置1时,表示此时数据包为某应用报文的最后一份数据包)。因此可利用SYN/FIN两个码位来规定某一应用报文(或某一应用数据流)的开始与结束。

TCP协议就是利用端口序号和SYN/FIN码位来区分应用数据流并判断其性质的,从而使具有四层功能的高端路由器具有某些对应用数据流的控制功能。

3 TCP/IP 的工作原理

下面以采用TCP/IP协议传送文件为例,说明TCP/IP的工作原理,其中应用层传输文件采用文件传输协议(FTP)。

TCP/IP协议的工作流程如下:

●在源主机上,应用层将一串应用数据流传送给传输层。

●传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。

●在网络层给TCP段加上包括源、目的主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路层。

●链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发往目的主机或IP路由器。

●在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层。

●网络层检查IP报头,如果报头中校验和与计算结果不一致,则丢弃该IP数据包;若校验和与计算结果一致,则去掉IP报头,将TCP段送交传输层。

●传输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则向源主机发确认信息;若不正确或丢包,则向源主机要求重发信息。

●在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用程序。这样目的主机接收到的来自源主机的字节流,就像是直接接收来自源主机的字节流一样。

转载自:

转载于:https://www.cnblogs.com/wspblog/p/5036643.html

你可能感兴趣的文章
Vue 框架-01- 入门篇 图文教程
查看>>
Spring注解之@Lazy注解,源码分析和总结
查看>>
多变量微积分笔记24——空间线积分
查看>>
Magento CE使用Redis的配置过程
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Mac 下的Chrome 按什么快捷键调出页面调试工具
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>