Life is not a rehearsal

  "人生没有彩排"

参考资料TCP/IP入门经典 (第五版)

     TCP/IP详解 卷一:协议

一、什么是TCP/IP

  TCP/IP是一族定义了网络数据传输规则的协议,现在大多数的网络设备都使用TCP/IP协议进行通信

二、TCP/IP分层 

  1、分层

应用层
传输层
网络层
数据链路层

  

  2、各层的主要功能

    ● 数据链路层:处理通信电缆与接口的细节,将网络层传来的IP数据报转化为帧,再转化为比特流,使其能在通信介质之间传输

    ● 网络层:提供逻辑寻址的功能,使数据传输独立于硬件地址

    ● 传输层:为两台主机上的应用程序提供端到端的通信,提供了流量控制、错误控制和确认服务

    ● 应用层:处理特定的应用程序细节

  3、各层上的常见协议及简介

    各层上的协议

        (自己把书上的图重新画了一遍...)

    协议简介:

    ● TCP:提供可靠的传输层服务,面向连接

    ● UDP:为应用程序发送和接收数据报,无连接,不可靠

    ● IP:网络层的核心协议,提供逻辑寻址、路由选择等服务

    ● ICMP:IP协议的附属协议,用来与其他主机或路由器交换错误报文和其他重要信息

    ● IGMP:Internet组管理协议,用来把UDP数据报多播到多个主机

    ● ARP和RARP:用于将IP地址和硬件地址相互转换

三、一些重要的概念

  1、IP地址:IP地址是网络层抽象出来用一个32bit(IPv4)整数来表示的逻辑地址,用于唯一地标识网络上的每一台设备,常用的表示方法是点分十进制,如:192.168.1.1

     IP地址分类:

    各类IP地址的范围:

  2、物理地址(MAC地址):网络设备的身份标识,出厂时就已经固化在网络硬件当中,在以太网中使用48个bit来表示,常用6个以冒号分隔的十六进制的整数来表示,如: 00:0C:29:D2:58:6B

  3、端口号(port):端口号是应用程序对于传输层的一个身份标识,传输层通过端口号来区分不同的应用程序,TCP和UDP采用16bit的端口号来识别应用程序

  4、套接字(socket):由IP地址和端口号组合而成的地址,如:111.121.131.141.21指向IP地址为111.121.131.141的主机的21号端口

  5、子网掩码(mask):类似于IP地址的32bit的地址,可以区分网络号和主机号,用于判断IP地址是否在本地子网内

  6、域名系统(DNS):域名系统是一个分布的数据库,提供IP地址和主机名之间的映射信息

  7、IP首部的协议域:在IP首部中有一个长度为8bit的协议域,用于标识数据报来自于上层的哪一个协议

  8、封装:当用户从本机的应用程序发送数据到网络上的某一台主机时,数据将从协议栈的顶部往下,逐层添加相应的首部(和尾部),然后到达链路层转换为比特流发送到传输介质,这个过程称为封装。其过程如下:

  9、分用:当主机接收来自传输介质的数据时,比特流将从协议栈的底部往上,逐层去掉相应的首部(和尾部),并根据首部信息发送给指定的协议,最后根据端口号发送给应用程序,用户收到数据,这个过程称为分用。其过程如下:

  10、标准文档:关于TCP/IP标准,可以访问 RFC文档

四、简单描述一次数据传输的全过程

  假设现在我要从我的电脑上发送一份数据到某台主机,假设我使用传输层的TCP,那么具体流程将类似下面这样:

  注:这里不讨论更深的细节,比如IP分片、ARP解析、丢包等

封装:①~④

  ①我将数据准备好,并点击了发送,应用程序通过指定端口将数据发送至传输层的TCP;(应用层)

  ②TCP加上TCP首部(包含源端口号和目的端口号等信息)后封装为TCP分段,传输层将TCP分段发送至网络层的IP;(传输层)

  ③IP加上IP首部(包含本机的IP地址和目的IP地址等信息,已经经过DNS解析)后封装为IP数据报,网络层将IP数据报发送至数据链路层;(网络层)

  ④数据链路层加上以太网首部和尾部后将IP数据报封装为以太网帧,经过更细分的子层将以太网帧转化为比特流,然后传输到我所在的子网的路由器;(数据链路层)

IP寻址和路由选择:⑤~⑥

  ⑤子网的路由器将比特流转化为以太网帧,数据链路层将以太网帧去掉以太网首部和尾部,发送至IP层;(数据链路层)

  ⑥IP层检查数据报的IP首部,先根据子网掩码判断目的IP地址是否在本地子网内:(网络层)

    ● 如果目的IP地址在本地子网内,路由器会将数据报封装后经数据链路层发送给指定主机或路由器

    ● 如果目的IP地址不在本地子网内,那么路由器将数据报封装后经数据链路层发送给当前路由所在的子网的路由器(向上一层的网络传送),路由器收到后继续执行⑤

分用:⑦~⑩

  ⑦目的主机收到比特流以后转化为以太网帧,去掉以太网首部和尾部,发送给网络层的IP;(数据链路层)

  ⑧IP检查IP数据报,发现目的IP地址就是本机IP地址,去掉IP首部后根据`协议域`发送给传输层的TCP;(网络层)

  ⑨传输层根据目的端口号将去掉TCP首部后的数据发送至指定的应用程序;(传输层)

  ⑩应用程序接收数据;(应用层)

至此,就完成了一次完整的数据传输~~

TCP/IP-入门的更多相关文章

  1. TCP/IP入门(4) --应用层

    /** 本篇博客由汗青ZJF整理并发布, 转载请注明出处: http://blog.csdn.net/zjf280441589/article/category/1854365 */ TCP/IP中的 ...

  2. TCP/IP入门(2) --网络层

    /** 本篇博客由 126(127不可用) 2^24 -2 B 2^14 -1 128.1 191.255 2^16 -2 C 2^21 -1 192.0.1 223.255.255 2^8 -2 D ...

  3. TCP/IP入门(1) --链路层

    /** 本博客由汗青ZJF整理并发布, 转载请注明出处: http://blog.csdn.net/zjf280441589/article/category/1854365 */ TCP/IP体系结 ...

  4. 《TCP/IP入门经典》摘录--Part 3

    TCP/IP协议系统 3.子网划分和CIDR 子网 划分网络 为什么需要划分子网? 子网划分就是在网络 ID 之下提供了第 2 层逻辑组织.路由器能够把数据报发送给网络里的某个子网地址(一般对应于一个 ...

  5. 《TCP/IP入门经典》摘录--Part 2

    TCP/IP协议系统 1.网络访问层 网卡(network adapter),即网络接口板,又称网络适配器或NIC (网络接口控制器),是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,由 ...

  6. 《TCP/IP入门经典》摘录--Part 1

    TCP/IP基础知识 什么是TCP/IP Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议, ...

  7. TCP/IP入门(3) --传输层

    原文:http://blog.csdn.net/zjf280441589/article/category/1854365 传输层的主要功能 1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主 ...

  8. TCP/IP入门学习(2)---OSI分层

    一.会话层以上的处理 1.表示层 将数据从主机特有的格式转换为网络标准传输格式.以此使得不同环境之间的通信成为可能. 2.会话层 即决定使用哪个连接或者哪种连接方式将数据发送出去.会话层也会在数首部添 ...

  9. TCP/IP入门学习(1)---分层概述

    本文旨在记述一些学习中的笔记 OSI分层:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 详细点: 1.应用层:为应用程序提供服务并规定程序中通信相关细节. 2.表示层:将应用处理的信息转 ...

  10. TCP/IP、Http、Socket、XMPP-从入门到深入

    TCP/IP.Http.Socket.XMPP-从入门到深入 终极iOS程序猿 2016-12-29 18:27 为了便于大家理解和记忆,我们先对这几个概念进行的介绍,然后分析他们的不同,再进行详细的 ...

随机推荐

  1. 为什么PCI-e比SATA快这么多?

    PCIe协议和SATA协议都是分层协议,分为物理层,数据链路层,传输层,命令层和应用层. 硬件工程师主要关注物理层.数据链路层和传输层.所有CMD/data由应用层和命令层打下来,每向下走一层,多一层 ...

  2. COJ 2135 Day10-例1

    Day10-例1 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 给定N个物品,价格分别为A1, A2…AN.设计一套面值互不 ...

  3. i++和++i的老问题

    对于++j,该式是指先将j的值自加1,然后再取j的值.自增过后参与计算 i的值也为10:对于i++,该表达式是指先取i的值做运算,再将i加1.参见过计算后再自增

  4. SendMessage API

    using System; using System.IO; using System.Threading; using System.Diagnostics; using System.Runtim ...

  5. a为整型数组,&a+1的含义

    #include <stdio.h> int main() { int a[10]; printf("a的值为:\t%d\n",a); printf("&am ...

  6. 《ACM国际大学生程序设计竞赛题解I》——6.8

    Poj1068: Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in ...

  7. js中arguments的应用

    Javascrip中的每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素.argument ...

  8. 10th day

    貌似有几天没写博客了额.... 现在学习MySQL数据库,难度并不是很大,只是需要记忆的知识点比较多,好多语法之类的,比较容易混淆,而且老师讲课的速度还是蛮快的,虽然部分同学觉得听起来有点吃力,不过我 ...

  9. PHP自学之路---报表及绘图技术

    Ø  报表 a)        什么是报表 报表就是用表格.图表等格式来动态显示数据. b)        PHP绘图坐标系 1.  坐标系介绍 下图说明了PHP坐标系.坐标原点位于左上角,以像素为单 ...

  10. Hadoop HDFS (3) JAVA訪问HDFS

    如今我们来深入了解一下Hadoop的FileSystem类. 这个类是用来跟Hadoop的文件系统进行交互的.尽管我们这里主要是针对HDFS.可是我们还是应该让我们的代码仅仅使用抽象类FileSyst ...