当前位置: 首页 > news >正文

TCP/IP协议讲解 一

——————————————————————————————————————

0x000 什么是TCP/IP协议

    Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

———————————————————————————————————————————————————
0x001 History 历史

  

    为了减少网络设计的复杂性,大多数网络都采用分层结构。对于不同的网络,层的数量、名字、内容和功能都不尽相同。在相同的网络中,一台机器上的第N层与另一台机器上的第N层可利用第N层协议进行通信,协议基本上是双方关于如何进行通信所达成的一致。
    不同机器中包含的对应层的实体叫做 对等进程。在对等进程利用协议进行通信时,实际上并不是直接将数据从一台机器的第N层传送到另一台机器的第N层,而是每一层都把数据连同该层的控制信息打包交给它的下一层,它的下一层把这些内容看做数据,再加上它这一层的控制信息一起交给更下一层,依此类推,直到最下层。最下层是物理介质,它进行实际的通信。相邻层之间有接口,接口定义下层向上层提供的原语操作和服务。相邻层之间要交换信息,对等接口必须有一致同意的规则。层和协议的集合被称为网络体系结构。
    每一层中的活动元素通常称为 实体,实体既可以是软件实体,也可以是硬件实体。第N层实体实现的服务被第N+1层所使用。在这种情况下,第N层称为服务提供者,第N+1层称为服务用户。
    服务是在服务接入点提供给上层使用的。服务可分为面向连接的服务和面向无连接的服务,它在形式上是由一组原语来描述的。这些原语可供访问该服务的用户及其他实体使用。

———————————————————————————————————————————————————
0x002 一些概念和专有名词

IP
IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。
高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。

TCP

TCP是面向连接的通信协议,通过 三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
TCP提供的是一种可靠的 数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
面向连接的服务(例如 Telnet、 FTP、 rlogin、 X Windows和 SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收 域名数据库),但使用UDP传送有关单个主机的信息。

UDP

UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
UDP与 TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。
欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。

ICMP

ICMP与IP位于同一层,它被用来传送IP的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。

————————————————————————————————————————————————————————————————————————————
0x003 TCP/IP 参考模型
TCP/IP参考模型是首先由ARPANET所使用的网络体系结构。这个体系结构在它的两个主要协议出现以后被称为TCP/IP参考模型(TCP/IP Reference Model)。这一网络协议共分为四层:网络访问层、互联网层、传输层和应用层,如图2所示。

图2 TCP/IP参考模型


网络访问层(Network Access Layer)在TCP/IP参考模型中并没有详细描述,只是指出主机必须使用某种协议与网络相连。
互联网层(Internet Layer)是整个体系结构的关键部分,其功能是使主机可以把分组发往任何网络,并使分组独立地传向目标。这些分组可能经由不同的网络,到达的顺序和发送的顺序也可能不同。高层如果需要顺序收发,那么就必须自行处理对分组的排序。互联网层使用因特网协议(IP,Internet Protocol)。TCP/IP参考模型的互联网层和OSI参考模型的网络层在功能上非常相似。
传输层(Tramsport Layer)使源端和目的端机器上的对等实体可以进行会话。在这一层定义了两个端到端的协议:传输控制协议(TCP,Transmission Control Protocol)和用户数据报协议(UDP,User Datagram Protocol)。TCP是面向连接的协议,它提供可靠的报文传输和对上层应用的连接服务。为此,除了基本的数据传输外,它还有可靠性保证、流量控制、多路复用、优先权和安全性控制等功能。UDP是面向无连接的不可靠传输的协议,主要用于不需要TCP的排序和流量控制等功能的应用程序。
应用层(Application Layer)包含所有的高层协议,包括:虚拟终端协议(TELNET,TELecommunications NETwork)、文件传输协议(FTP,File Transfer Protocol)、电子邮件传输协议(SMTP,Simple Mail Transfer Protocol)、域名服务(DNS,Domain Name Service)、网上新闻传输协议(NNTP,Net News Transfer Protocol)和超文本传送协议(HTTP,HyperText Transfer Protocol)等。TELNET允许一台机器上的用户登录到远程机器上,并进行工作;FTP提供有效地将文件从一台机器上移到另一台机器上的方法;SMTP用于电子邮件的收发;DNS用于把主机名映射到网络地址;NNTP用于新闻的发布、检索和获取;HTTP用于在WWW上获取主页。
——————————————————————————————————————————————————
0x004 层次
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。
TCP/IP协议模块关系TCP/IP协议模块关系
从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。
TCP/IP协议并不完全符合OSI的七层参考模型,OSI(Open System Interconnect)是传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层(网络接口层)、网络层(网络层)、传输层(传输层)、会话层、表示层和应用层(应用层)。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。由于ARPANET的设计者注重的是网络互联,允许通信子网(网络接口层)采用已有的或是将来有的各种协议,所以这个层次中没有提供专门的协议。实际上,TCP/IP协议可以通过网络接口层连接到任何网络上,例如X.25交换网或IEEE802局域网。
注意tcp本身不具有数据传输中噪音导致的错误检测功能,但是有实现超时的错误重传功能;





相关文章:

  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #NOIP 2014# day.1 T2 联合权值
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #NOIP 2014# day.2 T2 寻找道路
  • #NOIP 2014#Day.2 T3 解方程
  • 【Window编程】Step.1 我的第一个Windows程序
  • [codevs 1296] 营业额统计
  • 【Window程序设计:第五版】翻译勘误 转载
  • 【hdu 1754】I Hate It 【线段树 训练1】
  • 【HDU 1394】Minimum Inversion Number 【线段树 训练2】
  • 【Windows编程】Step.2 消息循环机制
  • 【CDOJ 1334】 郭大侠与Rabi-Ribi
  • 【CDOJ 1074】秋实大哥搞算术【栈计算表达式】
  • 【CDOJ 1329】卿学姐与魔法
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 2017 前端面试准备 - 收藏集 - 掘金
  • android 一些 utils
  • Angular4 模板式表单用法以及验证
  • Apache的基本使用
  • Docker入门(二) - Dockerfile
  • EventListener原理
  • HTML中设置input等文本框为不可操作
  • HTTP中GET与POST的区别 99%的错误认识
  • JS字符串转数字方法总结
  • Promise面试题,控制异步流程
  • python docx文档转html页面
  • Spring-boot 启动时碰到的错误
  • tensorflow学习笔记3——MNIST应用篇
  • 聊聊flink的TableFactory
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 入口文件开始,分析Vue源码实现
  • 使用Swoole加速Laravel(正式环境中)
  • 算法系列——算法入门之递归分而治之思想的实现
  • 怎么将电脑中的声音录制成WAV格式
  • ​linux启动进程的方式
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #AngularJS#$sce.trustAsResourceUrl
  • (二)丶RabbitMQ的六大核心
  • (分类)KNN算法- 参数调优
  • (规划)24届春招和25届暑假实习路线准备规划
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 5种线程安全集合
  • .net core使用ef 6
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET Standard 的管理策略
  • .net 调用php,php 调用.net com组件 --
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • @Async注解的坑,小心