全硬件TCP/IP协议栈学习笔记(第一天:TCP/IP协议学习一)

原创 2017年10月06日 21:32:21
首先感谢大牛的文章来学习
http://blog.csdn.net/samantha_wang/article/details/44241607
http://blog.csdn.net/goodboy1881/article/details/668556
一.为什么会有TCP/IP协议
首先呢,TCP/IP不是一个协议,而是一个协议族的统称。他们的存在是为了在将电脑联合起来的时候,利用他们可以和其他的计算机终端做自由的交流。
二.TCP/IP协议分层

1.TCP/IP族按照层次由上到下,层层包装。每一层都有自己的功能,每一层都有下一层的支持。而用户接触的,只是最上边一层,没有感觉到下面一层层,但是理解的时候要从最下层由下向上来理解。最上边是应用层,这里有http,ftp等熟悉的协议。而第二层就是传输层,TCP和UDP协议就是在这个层次。第三层是网络层,IP协议就在这里,他负责对数据加上IP地址和其他数据以确定传输的目标。第四层叫做数据链路层,这个层次为待传输的数据加上一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。再往下就是硬件层次,负责网络的传输,这个层次的定义包括网线的格式,网卡的定义等等。
2.发送协议的主机从上到下将数据按照协议封装,而接收数据的主机则按照协议从得到的数据包解开,最后拿到需要的数据。这种结构非常像栈,所以我们也把TCP/IP协议族称为TCP/IP栈。
3.每一层都是为了完成一种功能,为了实现这些功能,需要大家每个人都要遵循共同的规则,而这个规则就叫做“协议”。互联网的每一层都定义了许多协议。而这些协议的总称,就叫做“互联网协议”,他们是互联网的核心。
三.基本常识
1.互联网地址(IP地址):网络上的每一个节点都必须有一个独立的Internet地址,也叫IP地址。通常使用的IP地址是一个32bit的数字,这32bit的数字分成四组,也就是常见的255.255.255.255的样式。需注意,IP地址是网络号+主机号的组合,这十分重要。
2.域名系统:域名系统就是一个分布的数据库,它提供将主机名(就是网址)转换成IP地址的服务。
3.RFC:TCP/IP协议的标准文档。他一共有4000多个协议的定义。
4.端口号:这个号码是用在TCP,UDP上的一个逻辑号码,并不是一个硬件端口。平时所说的把某某的端口封掉,也只是在IP层次把带有这个号码的IP包滤掉了而已。
5.应用编程接口(API):现常用的编程接口有socket和TLI。主要是提供应用程序和开发人员以访问一组例程功能,而无需考虑其底层的源代码是为何,或理解其内部工作机制的细节。
四.实体层
就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。
五.数据链路层
单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号为有何意义?
这就是“连接层”的功能,他在“实体层”的上方,确定了0和1的分组方式。
数据链路层有三个目的:
1.为IP模块发送和接收IP数据报。
2.为ARP模块发送ARP请求和接收ARP应答。
3.为RARP发送RARP请求和接收RARP应答。
注:ARP:地址解析协议,是用IP地址换MAC地址(媒体访问地址,或称为物理地址,硬件地址。MAC地址是网卡决定的,是固定的,共48位,实际上就是适配器地址,IP地址就如同一个职位,而MAC地址则好像是去应聘这个职位的人才,职位既可以让甲坐,也可以让乙坐,同样的道理一个结点的IP地址对于网卡是不做要求,基本上什么样的厂家都可以用,也就是说IP地址与MAC地址并不存在着绑定关系。)的一种协议,而RARP则叫做逆地址解析协议。

以太网的定义是指数字设备公司( Digital Equipment Corp.)、英特尔公司(Intel Corp.)和Xerox公司在1982年联合公布的一个标准。以太网规定,一组电信号构成一个数据包,叫做“帧”,每一帧分成两个部分:标头(head)和数据(data)。

标头包含了数据包的一些说明项,比如发送者,接受者,数据类型等;“数据”包括了数据包的具体内容。标头的长度固定为18字节。数据的长度最长为1500字节,最短为46字节。因此,整个“帧”最长为1518字节,最短为64字节。如果数据很长,就必须分割成多个帧进行发送。
以太网规定,连入网络的所有设备,都必须具有“网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这就是MAC地址。

定义地址只是第一步,在这之后要解决一块网卡如何知道另一块网卡的MAC地址?回答是一种ARP协议。而在以太网数据包必须知道接收方的MAC地址,然后才能发送。
之后就算有了MAC地址,系统如何才能把数据包准确的发送到接收方?,而以太网采用用了一种很原始的方式,即向本网络内的所有计算机发送,让每台计算机自己判断,是否为接收方。他们读取这个包的“标头”,找到接收方的MAC地址,然后与自身的MAC地址进行比较,如果两者相同,就接受这个包,作进一步处理,否则就丢弃这个包,这种发送方式就叫做广播。

有了数据包的定义,网卡的MAC地址,广播的发送方式,“连接层”就可以在多台计算机之间传输数据。

六.网络层
1.由来:以太网协议,依靠MAC地址发送数据。但是,以太网采用广播来发送数据包,效率低,而且局限在发送者所在的子网络。因此,要找到一种方法,能够区分那些MAC地质属于同一个子网络,那些不是。如果是同一个子网络,就采用广播,否则采用路由(...)方式发送,而这是MAC地址无法实现的,他至于厂商有关,与所处网络无关,这就导致了“网络层”的诞生,他的作用就是引用一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。而这套地址就叫做“网络地址”,简称“网址”。于是,“网络层”出现之后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,他们是随机组合在一起的。
网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据报送到该子网络中的目标网卡,因此,先处理网络地址,在处理MAC地址。
2.IP协议
规定网络地址的协议,叫做IP协议。他所规定的地址,就被称为IP地址。我们采用的一般是IPv4.这个版本规定,网络地址由32个二进制位组成。习惯上分为四段,如255.255.255.255,这个地址分成两部分,前一部分代表网络,后一部分代表主机。但是单从IP地址,我们无法分辨网络部分。因此,我们需要一个参数来判断两台计算机是否属于同一个子网络,这个参数就是“子网掩码”,它在形式上等同于IP地址,也是一个32位的二进制数,他的网络部分全部为1,主机部分为0.知道子网掩码我们就可以判断两个IP地址是否属于同一个自网络下,方法就是将两个IP地址与子网掩码分别进行AND运算。,比较结果是否相同,如果是的话,就表明在同一个子网络中。
所以,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定那些地址在同一个子网络。
3.IP数据包
根据IP协议发送的数据,就叫做IP数据包。其中包含IP地址信息。但是由于以太网数据包只包含MAC地址,并没有IP地址栏,但我们也并不需要为他添加一个栏位,我们将IP数据包直接放进以太网数据包的“数据”中,而不用修改以太网的规格,这就是互联网分层的好处:上层的变动完全不涉及下层的结构。IP数据也分为“标头”和“数据”两部分,"标头"主要是版本,长度,IP地址,“数据”部分则是IP数据包的具体内容。他放在以太网数据包后,就是这样

IP数据包的“标头”部分的长度为20到60字节,整个数据包的总长度最大为65535字节,因此,一个IP数据包的“数据”部分最长为65515字节。
版权声明:本文为博主原创文章,未经博主允许不得转载。

RT_thread 学习笔记2——TCP/IP协议栈(LwIP)

netconn write() 原型声明  int  netconn write(struct  netconn *conn,  void *data, int  len,  unsigned in...

RT_thread 学习笔记2——TCP/IP协议栈(LwIP)

netconn write() 原型声明  int  netconn write(struct  netconn *conn,  void *data, int  len,  unsigned in...
  • lcydhr
  • lcydhr
  • 2015年04月16日 10:07
  • 442

Android学习笔记六十四:浅谈TCP/IP协议栈(二)IP地址

出处:http://geek.csdn.net/news/detail/78359?ref=myread 读完这个系列的第一篇浅谈TCP/IP协议栈(一)入门知识,有很多时候学一门新知识时,开头总是...

【科研论文】某雷达自动测试系统研制–基于全硬件TCP/IP协议栈芯片W5300

摘要:        雷达用于实现对目标的准确定位,帮助武器系统锁定目标,继而命中并摧毁目标。因此,雷达性能的优劣直接影响了对目标的定位精度,继而影响了整个武器系统的功效。本课题研究某型号雷达的自动...

剖析:WIZnet以太网核心技术–全硬件TCP/IP协议栈

WIZnet,是全球第一家专注于全硬件TCP/IP协议栈技术(iOffloadTM Tech)的半导体公司,精心为用户提供高速稳定的以太网解决方案,广泛应用在工业自动化、智能电网、安防门禁、金融机具等...

TCP/IP协议技术详解学习笔记

  • 2012年03月22日 16:14
  • 165KB
  • 下载

linux源码-TCP/IP协议栈学习预备(1) 数据结构之各socket之间的关系

在阅读协议栈的源码时,经常可以看到sock在各struct sock, struct socket及struct tcp_sock之间相互转换。刚开始时经常被转迷糊。特意总结一下,分享给大家。 通过代...

linux-Tcp IP协议栈源码阅读笔记

转载 ...

Linux的TCP/IP协议栈阅读笔记

1 从init/main.c的start_kernel函数说起。在这个函数里面调用kernel_thread启动了init进程,这个进程对应的函数是同一个文件里面的init函数,在init函数里面调用...

Linux TCP/IP协议栈源码阅读笔记

一.linux内核网络栈代码的准备知识   1. linux内核ipv4网络部分分层结构:   BSD socket层: 这一部分处理BSD socket相关操作,每个socket在内核中...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:全硬件TCP/IP协议栈学习笔记(第一天:TCP/IP协议学习一)
举报原因:
原因补充:

(最多只允许输入30个字)