15、TCP/IP协议


      几台孤立计算机系统组在一起形成网络,几个孤立网络连在一起形成一个网络的网络,即互连网。一个互连网就是一组通过相同协议族互连在一起的网络。
互联网的目的之一是在应用程序中隐藏所有的物理细节。
网格协议通常分不同层次进行开发,每一层分别负责不同的通信功能:
(1)链路层(数据链路层/网络接口层),通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与电缆的物理接口细节。
(2)网络层(互联网层),处理分组在网络中的活动,如分组的选路。
(3)运输层主要为两台主机上的应用程序提供端到端的通信。
(4)应用层负责处理特定的应用程序细节。

      网络层IP提供一个不可靠的服务,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。
      运输层TCP提供一个可靠的服务,TCP采用超时重传,发送和接收端到端的确认分组等机制。
      连接网络的途径有两个:一个是网桥、一个是路由器。网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网格进行互连。
一般来说,TCP服务器是并发的,而UDP服务器是重复的。
15.1、TCP传输协议

TCP通过以下方式来提供可靠性:
(1)应用数据被分割成TCP认为最适合发送的数据块,这与UDP完全不同,应用程序产生的数据报长度保持不变。
(2)当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。
(3)当TCP收到发自TCP连接另一端的数据,它将发送一个确认。
(4)TCP将保持它首部和数据的检验和。
(5)TCP会对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
(6)当IP数据报发生重复时,TCP的接收端会丢弃重复的数据。
(7)TCP还能提供流量控制。TCP的流量控制由连接的每一端通过声明的窗口大小来提供。

建立TCP连接协议:(建立一个连接需要三次握手、而终止一个连接要经过四次握手)

(1) 请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。这个SYN段为报文段1。

(2) 服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。

(3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)

当一个连接建立时,连接双方都要通告各自的MSS(最大报文段长度)。

半关闭:TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。

同时打开:TCP是特意设计为了可以处理同时打开,对于同时打开它仅建立一条连接而不是两条连接。

TCP呼入连接请求队列规则:

(1) 正等待连接请求的一端有一个固定长度的连接队列,该队列中的连接请求已被TCP接受,但还没有被应用层所接受。
(2) 应用层将指明该队列的最大长度,这个值通常称为积压值(backlog)。它的取值范围是0—5之间的整数,包括0和5。
(3) 当一个连接请求(即SYN)到达时,TCP使用一个算法,根据当前连接队列中的连接数来确定是否接收这个数据。

15.2、IP协议


IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。

首部长度指的是首部占32bit字的数目,包括任何选项。由于它是一个4比特字段,因此首部最长为60字节。

总长度字段是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长可达65535字节。总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。

      标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。
      TTL(time to live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1,当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。
      首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。
      每一份IP数据报都包含源IP地址和目的地址。
      最后一个字段任选项,是数据报中的一个可变长的可选信息。

15.3、UDP用户数据报协议


UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。

    UDP长度字段指的是UDP首部和UDP数据的字节长度。
    UDP检验和覆盖UDP首部和UDP数据,而IP首部检验和只覆盖IP首部并不覆盖IP数据报中的任何数据。UDP的检验和是可选的,而TCP的检验和是必需的。
    UDP检验和的基本计算方法与IP首部的检验和计算方法相类似(16bit字的二进制反码和),但是它们之间存在不同的地方。(1)UDP数据报的长度可以为奇数字节,但是检验和的算法是把若干个16bit字相加。(2)UDP数据报和TCP段都包含一个12字节长的伪首部,它是为了计算检验和而设置的。
    UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端和接收端之间发生的任何改动。
    TCP连接经常是“远程”连接(经过许多路由器和网桥等中间设备)。UDP一般为本地通信。 
IP分片:
    物理网格层一般要限制每次发送数据帧的最大长度。IP分片可以发生在原始发送端主机上,也可以发生在中间路由器上,只有到达目的地才进行重新组装,重新组装是由目的端的IP层来完成,其目的是使分片的重新组装过程对运输层(TCP和UDP)是透明的,以及防止某些可能的性能降低。
由于IP层本身没有超时重传的机制而是由更高层来负责超时和重传,IP分片传送过程中,只要丢失一片数据就会重传整个数据报。
在一个以太网上,数据帧的最大长度是1500字节。
    位于@符号后的数字是从数据报开始处计算的片偏移值。
    大多数UDP服务器是重复型服务器,单个服务器进程对单个UDP端口上(服务器上的名知端口)的所有客户请求进行处理。如请求来不急处理便会由UDP自动排队。
    当UDP数据到达的目的IP地址为广播地址或多播地址,而且在目的IP地址和端口号外有多个端点时,就向每个端点传送一份数据报的复制。

15.4、域名系统(DNS)


域名系统是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。

    在一个应用程序请求TCP打开一个连接或使用UDP发送一个数据报之前,必须将一个主机名转换为一个IP地址。

15.5、网络文件系统


      RPC是构造客户-服务器应用程序的一种方式,使得看起来客户只是调用了服务器的过程,所有的网格操作细节都被隐藏在RPC程序包为一个应用程序生成的客户和服务器残桩以及RPC库的过程中。实际上发生如下动作:
(1) 当客户程序调用远程的过程时,它实际上只是调用了一个位于本机上的、由RPC程序包生成的函数。
(2) 服务器主机上的一个服务器残桩负责接收这个网络报文。
(3) 当服务器函数返回时,它返回到服务器残桩。
(4) 客户残桩从接收到的网格报文中取出返回值,将其返回给客户程序。

15、TCP/IP协议的更多相关文章

  1. TCP/IP协议基础(转)

    转自 http://www.chinaunix.net 作者:Bernardus160  发表于:2003-12-03 17:33:15 TCP/IP协议基础 -------------------- ...

  2. TCP/IP 协议介绍

    转自http://blog.jobbole.com/104886/ 一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是分层的,从底层至应 ...

  3. TCP/IP协议学习笔记

    计算机网络基础知识复习汇总:计算机网络基础知识复习 HTTP协议的解析:剖析 HTTP 协议 一个系列的解析文章: TCP/IP详解学习笔记(1)-- 概述 TCP/IP详解学习笔记(2)-- 数据链 ...

  4. TCP/IP协议原理与应用笔记18:构成子网和超网

    1. 引言: (1)类别IP编址(Classful IP)的缺陷 • 固定的3种IP网络规模      C类地址:少于255台主机的网络      B类地址:介于255~65535台主机的网络     ...

  5. TCP/IP协议头部结构体(网摘小结)(转)

    源:TCP/IP协议头部结构体(网摘小结) TCP/IP协议头部结构体(转) 网络协议结构体定义 // i386 is little_endian. #ifndef LITTLE_ENDIAN #de ...

  6. 网络基础二 tcp/ip协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...

  7. 网络基础tcp/ip协议一

    计算机网络: 硬件方面:通过线缆将网络设备和计算机连接起来 软件方面:操作系统,应用软件,应用程序通过通信线路互连 实现资源共享,信息传递 计算机网络的功能: 数据通信 资源共享 增加可靠性 提高系统 ...

  8. 【TCP/IP 协议】 TCP/IP 基础

    总结 : 通过学习 TCP/IP 基础, 并总结相关笔记 和 绘制思维导图 到博客上, 对 TCP/IP 框架有了大致了解, 之后开始详细学习数据链路层的各种细节协议, 并作出笔记; 博客地址 : h ...

  9. TCP/IP协议、UDP协议、 Http协议

    开放式系统互联通信参考模型(Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化 ...

随机推荐

  1. Oracle DBA管理包脚本系列(二)

    该系列脚本结合日常工作,方便DBA做数据管理.迁移.同步等功能,以下为该系列的脚本,按照功能划分不同的包.功能有如下: 1)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写. ...

  2. Redis基础学习(四)—Redis的持久化

    一.概述      Redis的强大性能很大程度上都是因为数据时存在内存中的,然而当Redis重启时,所有存储在内存中的数据将会丢失,所以我们要将内存中的数据持久化. Redis支持两种数据持久化的方 ...

  3. 使用python解数独

    偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...

  4. JavaScript高级内容:原型链、继承、执行上下文、作用域链、闭包

    了解这些问题,我先一步步来看,先从基础说起,然后引出这些概念. 本文只用实例验证结果,并做简要说明,给大家增加些印象,因为单独一项拿出来都需要大篇幅讲解. 1.值类型 & 引用类型 funct ...

  5. spring之bean

    Bean的基本配置 id属性 id属性确定bean的唯一标识符,容器对bean的管理,访问,以及该bean的依赖关系,都通过该属性来完成.bean的id属性在Spring容器中应该是唯一的. clas ...

  6. 前端随手优化不完全篇-SEO篇

    一代码优化概述 关于代码优化的知识是纯理论的知识,学习的很枯燥.在学到CSS时,不免遇到CSS+div进行代码优化的知 识,因此在网上看了一些关于这方面的知识,简单的整合一下,梳理自己所了解的代码优化 ...

  7. PHP 魔术方法 __call 与 __callStatic 方法

    PHP 魔术方法 __call 与 __callStatic 方法 PHP 5.3 后新增了 __call 与 __callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会 ...

  8. php流程管理

    流程控制即某个人发起一个流程,通过一层一层审核,通过后,完成整个流程,若有一层审核未通过,中断整个流程.即结束! 比如请假流程: 某一员工发起一个请假流程,那么这个流程的节点人员即他的上级,上上级,上 ...

  9. JS判断值是否是正数

    1.使用isNaN()函数 isNaN()的缺点就在于 null.空格以及空串会被按照0来处理 NaN: Not a Number /** *判断是否是数字 * **/ function isReal ...

  10. 初学strurs基础

    Struts2基础学习总结 Struts 2是在WebWork2基础发展而来的. 注意:struts 2和struts 1在代码风格上几乎不一样. Struts 2 相比Struts 1的优点: 1. ...