目录
- 前言
- 协议
- 网络系统分层结构
- 层次结构
- 分层逻辑
- 协议栈
- TCP/IP协议族体系结构
- 应用层
- 传输层
- 网络层
- 网络接口层
- 边界
- TCP/IP与OSI的区别
- 网络层协议
- ARP
- ICMP
- IP协议
- 传输层协议
- TCP(面向连接通讯)
- UDP(无连接通讯)
- 应用层协议
- Telnet
- FTP
- SMTP
- WWW
- TCP/IP协议工作流程
- 数据的封装/打包
- 路由器
- 工作原理
- 主要功能
- 转发报文
- 路由选择
- 参考资料
前言
参照清华大学出版社-罗军周主编的《TCP/IP协议及网络编程技术》进行学习。
本篇主要参考第二章:《TCP/IP协议概述》
对何为TCP/IP协议以及相关知识进行介绍。
协议
- 一组收发信息的规定。
规定了通讯的实体之间、交换报文的格式和次序。
以及客户端如何发出信息、服务器如何响应等等。
- 为了完成不同的服务、可能需要不同的协议作为支撑。
比如通过遵循SMTP协议、可以让Foxmail和Outlook相互通讯。
网络系统分层结构
层次结构
采用分层的方式、组织各类协议以及实现协议的对象。
对于每个网络系统(比如TCP/IP、OSI):
- 层数固定
- 每层都涉及到不同的协议
- 每层协议固定
分层逻辑
- 层级之间的功能、相对独立。
- 层级之间有相应的逻辑接口。
- 上层建立在下层的基础上。
- 上层可以调用下层服务。
协议栈
各层协议之间形成一种从上到下、类似堆栈(特点:先进后出
)结构的依赖关系。
TCP/IP协议族体系结构
借用网络上的一张图、与OSI比较一下
OSI与TCP/IP分层
由高到低可以分成:
-
应用层:
登录、下载、浏览、邮件等等 -
传输层:
主要的协议是TCP/UDP协议。
负责两台主机上对应的应用进程之间"端到端"的通信。 -
网络层:
主要的协议是IP协议。
负责把源主机上的分组(大文件会分段发送
)根据需要发送到互联网中的任意一台目标主机上 -
网络接口层
通常包括系统的驱动程序、网卡。负责将其之上的网络层要发送出去的数据发送到其下面的物理网络(或者接收)。
对于网络接口层、有些也和OSI一样会分成数据链路层(网卡)和物理层(网线)、这样就会变成五层协议。
边界
-
操作系统与应用软件的边界
用户操作与服务
-
地址边界
高层互联网地址与底层网卡的边界
TCP/IP与OSI的区别
- 自下而上和自上而下
- 前者是应实际需求而产生的实作、本身在发展之前并没有定义一个严谨的架构。
- 后者是由标准化组织所制定、先定义一个功能完整的架构、在发展相应协议。
- 标准化测试
- 前者没有一个正式的单位负责测试软件是否完全遵照规范。
- 后者则有专门的单位负责测试、但是测试周期较长(一般两到三年)。所以经常出现规范与产品脱节的情况。
- 两套不同的协议
大致实现相同的关系、也可以理解成相互竞争的关系。 - 发展
- 前者要早10年、技术上发展更成熟、开发出来的相关协议也较多。
- 后者架构完整、功能详尽。但市场占有比例不如TCP/IP。
网络层协议
1、ARP
地址解析协议Address Resolution Protocol)
实现IP地址向物理地址的映射
- IP地址
可变逻辑编号(109信箱) - 物理地址
固定mac地址 (xx路xx号)
2、ICMP
控制报文协议(Internet Control Message Protocol)
传输出错的反馈协议(比如PIN命令)
3、IP协议
网络层中最重要的协议。
为了将数据分组在互联网上进行传输、而制定的规则。
传输层协议
在《《知乎》》上发现了一个很有趣的回答、搬过来:
亚当和夏娃分别生活在两个山头,山头之间是万丈深渊,亚当采集野果需要分享给夏娃,如果他们之间有一条索道(物理连接),野果可以顺着索道滑到夏娃那一边,那就没有网络协议什么事了。
事实上山头之间没有索道。但是亚当何等聪明,于是他想出了一个方法,假设亚当需要给夏娃10个野果,否则她会饿死。
1、TCP
传输控制协议Transmission Control Protocol)
-
面向连接通讯
确保从发送方发出的数据、按照顺序完整的交付给接收方。
连接建立
亚当对着夏娃大喊:爱妃,你听得到吗?
夏娃回应:孩他爹,我听得到!
亚当接着喊:那好,我扔果子给你吃,你接到果子就喊一声,一共十个。
运送货物
于是亚当开始扔第一个,夏娃喊收到了一个。
亚当扔第二个,夏娃喊收到两个。
超时重传 ( timeout retransmit)
亚当扔第三个,可是夏娃迟迟没有回音,亚当意识到可能果子落到悬崖了,于是重新扔,夏娃喊收到第三个。
Advertised window size = 0
于是亚当连续扔了第四、五、六个,夏娃急了:孩他爹,慢点扔,臣妾忙不过来了…
Advertised window size > 0
于是亚当坐下休息,爱妃又开始叫了:继续扔吧。
亚当开始扔第七个,夏娃喊收到七个。
…
关闭连接
终于亚当扔完了,亚当喊:爱妃,果子扔完了,寡人去忙别的了。
夏娃回复:好的,我也休息一下,再见。
亚当:再见
以上的过程类似TCP连接的过程,TCP是一个虚拟连接
2、UDP
用户数据报协议(User Datagram Protocol)
-
无连接通讯
只负责发送、不保证安全性(确认到达)以及顺序。因而效率高于TCP。
亚当和夏娃吵架了,任凭亚当如何大声喊,夏娃躲在树林后生闷气,一声不响,亚当害怕夏娃饿死,于是
开始自说自话朝着夏娃的山头扔玉米棒子:
一个、两个、三个…
一共扔了十个,但最终扔到对方山头到底有几个,亚当没有底,也许有的玉米棒子落到悬崖了,但是这个效率高啊,可以连续扔,以前扔10个果子需要一分钟,现在只需要20秒。
亚当扔果子、扔玉米都有可能扔到悬崖下,但是扔果子为何可以确保对方收到十个?那是因为夏娃收到一个果子,然后喊收到了,如果没有收到,亚当就重新扔,直到夏娃说收到了。而扔玉米棒子对方没有确认,所以对于丢弃的情况无法知道,也无法重新扔。
应用层协议
1、Telnet
远程登录协议
2、FTP
文件传输协议(File Transfer Protocol)
文件传输
3、SMTP
简单邮件传输协议(Simple Mail Transfer Protocol)
收发邮件
4、WWW
网络浏览
TCP/IP协议工作流程
TCP/IP协议工作流程发送方:将应用层发出的数据、经过四层协议栈层层打包直到被转化成一串比特流(012进制)送入物理网络、路由器通过IP确定目的地并投递。
接收方:识别物理层传输的比特流、经过层层解包直到变成数据被应用层识别。
-
数据的封装/打包
每一层对上层数据的头(尾)添加数据的动作
例如:当一个文件被拆分、每个分组数据都会按照以上的格式被打包投递、最后按照特定顺序拼接成原始文件。
路由器
- 具有多接口的、用于数据包转发的专用计算机
- 在异种的网络互联环境中建立灵活的连接。
例如以太网和令牌环 - 可以用完全不同的数据分组和介质访问方法链接各种资源。
- 不关心各自网络使用的硬件设备、但要求运行与网络协议相一致的软件。
路由器品牌可以不同、但要支持相同的协议。 - 工作于网络层
- 上接传输层(TCP)、下接物理层(网线/光纤)、通过IP报文的方式传递数据。
- 作为网络层的核心设备、一般来讲异总网络互连或者多个网络互连都应采用路由器的方式。
工作原理
图片摘自:http://blog.51cto.com/seafog/1562852- 如果发送方和接收方处在同一个局域网(网关)、报文将会被直接发送到网络上进行传输。
- 当发送方和接收方处在不同的网关内、路由器需要选择一个能到到达目的子网IP的路由器、并将IP报文发送。如果没有找到、则将IP报文发送给默认网关。
- 路由器转发IP报文时、只根据报文
目的IP地址
的网络号
部分、选择合适的端口。 - 路由器接收IP报文时、会判断端口所接的是否是目的子网、如果不是则继续转发。
主要功能
-
转发报文
为经过路由器的每一个分组、寻找一条最佳传输路径、并将该数据有效的传输到目的的站点。
路由器会根据路由表所指定的位置、将IP报文发送到下一个站点(路由器或主机)。如果在表中匹配失败、则丢弃该IP报文。
如果目的网络直接与路由器相连、路由器就把IP报文直接送到相应的端口上。
例如之前解释TCP/IP的工作流程时:将以太网发送的数据、经过路由器转发到了令牌环网络上。
-
路由选择
转发报文功能中的:
在路由表中寻找一条最佳传输路径。
网友评论