TCP/IP协议工作原理简述


// */
// ]]>

 

TCP/IP协议工作原理简述

1 概要

协议是什么?协议是一组为完成特定需求或功能而定义的标准通讯格式。协议是服务于具体需求或功能的,它不能独立存在。

制定TCP/IP协议的目的是为了解决主机互联以及互联的主机上的应用通讯的问题。TCP/IP协议共有四层:应用层、传输层、网络层、链路层。应用层实际就是我们的应用程序,对于非具体应用而言这一层的协议是未定义的,需要我们自己根据我们具体的业务模型来制定。传输层桥接应用层和网络层,向下为我们的应用层数据填入端口标识,向上根据端口标识往各个应用分发数据包。网络层主要的功能是逻辑选路,确保我们的数据包能到达指定的目的地。链路层负责往/从有直接物理链路相连的主机或路由器发包/收包。

TCP/IP协议是工作在主机或路由器上的,这一点很明显,因为网络拓扑中的实体除了主机(路由器)就是链路,链路当然不能运行我们的协议,它只能传输数据。当主机A中的a程序需要跟主机B中的b程序通讯的时候,A主机会根据TCP/IP协议往我们的原始数据包中依次塞入:TCP首部字段(假如应用程序基于TCP协议)、IP首部字段、以太网首部字段,最后形成的数据包我们称之为以太网数据帧,任何一台主机发送和接收的都只能是以太网数据帧;B主机收到相应的以太网数据帧后,会依次丢弃:以太网首部字段、IP首部字段、TCP首部字段,然后再将剩下的数据包交给b程序。现如今,很多复杂的应用程序也采用类似的思想对应用层协议进行分层。

2 应用层

常见的应用层协议有:

  • echo 7/tcp(udp)
  • daytime 13/tcp(udp)
  • ftp 21/tcp(udp)
  • ssh 22/tcp(udp)
  • telnet 23/tcp(udp)
  • tftp 69/tcp(udp)
  • finger 79/tcp(udp)
  • http 80/tcp(udp)
  • https 443/tcp(udp) # http protocol over TLS/SSL

应用层协议与我们具体编写的应用相关,它是整个TCP/IP协议族的最上层协议,也是唯一由用户制定通讯格式的协议(标准委员会不能未卜先知)。数据传输一般是由应用层发起的,但它除了提供一个目标地址(域名或IP地址)之外,不涉及任何传输细节。应用层只专注于应用所属领域内的业务逻辑。

3 传输层

工作在传输层的协议主要有TCP和UDP协议。传输层主要负责主机内的应用层数据包的收取和派发工作。应用层组好包后将数据包交给传输层,传输层经过一定的处理(填充TCP或UDP首部字段)之后,再转交给IP协议模块;传输层从下层IP模块收包时,去掉本层相关的首部字段,再将数据包派发给各个应用程序。由于传输层服务的对象是主机内的所有应用程序,所以它需要特定的手段来区分不同的应用程序,此即,端口。

只做上面这些事情似乎有点少!对,标准委员会的人也是这么想的。所以,除了上面的核心业务之外,不同的传输层协议还提供了点增值服务。例如:TCP提供可靠的数据传输业务;UDP提供一对多的广播业务。

传输层同样不清楚传输细节,它只对上层应用层负责。

4 网络层

工作在网络层的协议主要有:IP协议、ICMP以及IGMP协议。其中IP协议最为重要,ICMP和IGMP协议也得依赖IP协议来收发包。

网络层的核心业务即是选路(确定数据包的下一跳),在所有的网络层协议中,IP协议负责该核心业务,所以我们有时候也直接用IP协议来指代网络层。在处理上层传输层和下层链路层发来的数据包时,IP协议的行为是不一样的,前者,仅仅填入本机和目的端IP地址;后者,对于本应交给本机的数据包提交给上层传输层,对于非交给本机的数据包也为它们指明下一跳(需特殊配置主机)。可以看到IP协议不仅对本机尽职尽责,同时也颇具助人为乐的精神,事实上,这种助人为乐的精神正是整个TCP/IP协议得以正常运转的核心。

IP协议为上层传输层下发的数据包或路过的数据包选好路后,它们并不亲自将包送达下一站,而是将它们交代给链路层去护送。

5 链路层

工作在链路层的协议主要包括:Ethernet、IEEE 802、ARP、RARP等协议。链路层的核心功能是:1. 将数据包发送给有直接物理链路相连的主机(或路由器) 2. 从有直接物理链路相连的主机(或路由器)处收取数据。链路层执行的是实际的收发包工作,所以,它们只能往/从有直接物理链路相连的主机(或路由器)发送/收取数据,毕竟,物理规律总是得遵守的。

链路层必须向物理链路上发送所有IP协议交代下来的数据包,必须将所有收到的数据包(以太网数据帧)交给IP协议处理。链路层是没有什么自主权的,不能擅自截留,不能擅自丢包,能做的仅仅是搬运,实实在在的搬砖工人。链路层也没什么智商,IP交给它的数据包虽然包含IP地址,但它却看不明白,它只认物理地址(即48位mac地址)。如果某个IP地址是它不久前去过的地方(ARP缓存),那当要送包再去往该IP地址时,它直接就能送;否则,就得挨个问一遍,有则去,没有就算了。而且它也很容易被欺骗,网关就经常骗它。网关为什么要欺骗它呢?因为IP协议决定的下一跳不一定就在局域网中(即跟当前主机没有直接相连的物理链路),而链路层工作能力有限,只能在局域网内发包,所以网关只好骗它说我就是目标地址的主机。

Date: 2015-12-20T21:07+0800

Author: ruleless

Org version 7.9.3f with Emacs version 24

Validate XHTML 1.0

TCP/IP协议工作原理简述的更多相关文章

  1. 第一天开通博客,就粗略写一下刚了解TCP/IP协议工作过程

    Tcp/Ip协议分为四层:底层到高层顺序 链路层(硬件,网卡这些) 网络层(选择一条传输路径,如何从一台计算机请求另一条计算机) 传输层(遵循TCP(传输控制协议),UDP(用户数距协议)这些协议) ...

  2. TCP/IP协议原理【转载】

    前述        各种L2数据网具有不同的通信协议与帧结构,其网络节点设备可以是各种类型的数据交换机(X.25.FR.Ethernet和ATM等分组交换机):而L3数据网(IP网或internet) ...

  3. TCP/IP协议精华笔记

    1.简介 TCP/IP协议并非单指TCP协议.IP协议,它是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议.ICMP(Internet Control Mes ...

  4. 深入浅出理解 TCP/IP 协议 (一)

    文章转自:https://www.cnblogs.com/onepixel/p/7092302.html TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入 ...

  5. 深入浅出 TCP/IP 协议

    TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输.TCP/IP 协议采用4层结构,分别是应用层.传输层.网络层和链路 ...

  6. 测试那些事儿—浅谈TCP/IP协议

    TCP/IP协议是一系列网络协议的总和,是构成网络通信的核心骨架. TCP/IP的工作原理通俗的讲就是一个主机的数据要经过哪些过程才能发送到对方的主机上. TCP/IP协议采用四层结构,分别为应用层, ...

  7. TCP/IP协议(转)

    摘自:http://jpkc.nwpu.edu.cn/jp2006/rjjs/work/dzjc/rppt/chap08/08CH0005.HTM TCP/IP(Transmission Contro ...

  8. TCP/IP协议族——IP工作原理及实例具体解释(上)

     IP协议具体解释 本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包.来观察IP数据报传送过程中IP的格式,以及分片的过程. IP头部信息:IP头部信息出如今每一个 ...

  9. HTTP之Tcp/Ip协议的工作原理

    计算机与网络设备要相互通信,双方就必须基于相同的方法.比如,如何探测到通信目标.由哪一边先发起通信.使用哪种语言进行通信.怎样结束通信等规则都需要事先确定.不同的硬件.操作系统之间的通信,所有的这一切 ...

随机推荐

  1. rt—移植笔记1

    将rtt源码往stm32f407移植的时候,源码串口打印引脚设置有误,以下是源码引脚配置. 以下是原理图 可见配置有误.

  2. synchronized锁重入

    package synLockIn_1; /* synchronized锁重入,当一个线程得到一个对象锁且还未释放锁时,再次请求此对象锁时可以再次得到该对象的锁 * 此例中线程1进入Service类的 ...

  3. chrome调试JavaScript脚本

    随着 JavaScript 应用的复杂性逐渐提高,开发者需要有力的调试工具来帮助他们快速发现问题的原因,并且能高效地修复它.Chrome DevTools 提供了一系列实用的工具使得调试 JavaSc ...

  4. Objective - C - 添加类目 - NSDate

    1.类目为系统内部的类或者是没有源代码的类添加方法,不有添加实例变量 2.添加的方法会成为原类的一部分,子类照样可以使用 3.类目的文件名为原类名+文件名 4.既可以添加实例方法,也可以添加类方法 X ...

  5. TeXmacs 中输入狄拉克 braket 符号

    TeXmacs的数学模式下,默认会对括号进行自动补齐.这也导致输入狄拉克 braket 符号时得到的可能不是你想要的结果.经测试,可用以下输入方式输入 (以下 _ 表示光标所在位置,Tab代表Tab键 ...

  6. 通过sqoop来传输mysql/oracle/vertica数据至HBASE

    首先要注意将连接用的jar包,放到sqoop目录下,我的是/var/lib/sqoop 如果没有主键,则要加上-m 1 export正确的jdk目录 当做key的列必须唯一存在,不然报错 --mysq ...

  7. C语言 教学实践建议

    这是2016年秋季学期和北京工业大学耿丹学院合作教学的计划. 2016级有四个班,每班大约 32 人,每班配有一个有一定实际工作经验的助教,配合老师把课教好. C语言是一门基础课, 是耿丹学院新生的第 ...

  8. Java:多态(向上转型)

    先来看一段代码: class BaseClass{          public int book = 6;          public void base(){         System. ...

  9. 安装mysql 5.7+版本缺少data文件夹

    打开cmd命令窗口,并且进入到mysql安装目录的bin目录下.然后输入命令: mysqld --initialize-insecure --user=mysql 然后回车:去目录下查看,已经自动创建 ...

  10. 我的第一个WP8.1应用总结

    我的LUMIA925已经买了很久了,想自己开发WP应用放在上面,却一直想不到有什么特别的想法和需要.前几天的事情正好让我有了这个机会. 前几天在客户机房工作的时候,同事打电话来说另一个客户由于换了电脑 ...