【TCP/IP学习】TCP/IP协议族概貌
2015-11-22 14:43
381 查看
TCP/IP协议族包括众多的协议,整体上是一个分层的体系,每层又包含许多网络通信需要的协议类型。
网络层:ICMP,IP
数据链路层:RAP,RARP
用户空间通过socket的一系列系统调用来访问内核空间的这些协议提供的服务。
socket系列系统调用有两点功能:
1.将应用程序数据从用户空间复制到内核空间,或将内核空间数据复制到用户空间。
例如:send函数将数据从用户缓冲区复制到TCP/IP内核发送缓冲区,通过内核来发送数据。
recv函数将数据从TCP/IP内核接收缓冲区发送到用户缓冲区,通过内核来接收数据。
2.应用程序可以通过它来修改各层协议的头部或其他数据结构,来控制底层通信的行为。
例如:通过setsockopt函数来设置IP数据报在网络上的存活时间。
ARP:地址解析协议。主要是先IP地址到MAC地址的转换。
工作原理:主机B要获取主机A的物理地址,B向自己所在网络广播一个ARP请求,这个请求包含A的网络地址,B所在网络的所有节点都能接收到该请求,但只有A的网络地址与ARP请求的目标网络地址相同,所以只有A会回应一个ARP应答,其中包括自己的物理地址。
RARP:逆地址解析协议。
主要用于网络上没有存储设备的节点,因为没有存储设备所以其记不住自己的IP,只能通过其网卡上的物理地址向提供物理地址到网络地址映射的服务器,来查询自己的网络地址。
IP协议根据数据包的IP地址来决定如何投递它。如果不能直接发送给主机,就寻找合适的下一跳路由器,由路由器来转发,多次重复直到目标主机。
ICMP协议主要用于网络连接测试。ICMP报文分为两大类:差错报文和查询报文。
1.差错报文:用来回应网络错误,比如目标不可达和重定向。
2.查询报文:用来查询网络,进行网络连接测试,如:ping命令。
TCP:传输控制协议。为应用层提供可靠的,面向连接的,基于流的服务。
通信双方必须先建立TCP连接,会在内核中建立一个数据结构,包括连接状态,读写缓冲区,定时器等。通信结束需要关闭连接释放内核数据。
UDP:用户数据包协议。为应用程序提供不可靠,无连接,基于数据报的服务。
每个数据报都有一个长度,接收者必须以其为最小单位将所有内容一次性读出,否则数据将被截断。
SCTP:流控制传输协议。主要是为了在因特网上传输电话信号。
主要运行在用户空间中来负责处理各应用程序的逻辑。
1. TCP/IP协议整体体系结构。
自顶向下依次为:
用户空间包括:
应用层:telnet,ping,OSPF,DNS内核空间包括:
传输层:TCP,UDP,SCTP网络层:ICMP,IP
数据链路层:RAP,RARP
用户空间通过socket的一系列系统调用来访问内核空间的这些协议提供的服务。
socket系列系统调用有两点功能:
1.将应用程序数据从用户空间复制到内核空间,或将内核空间数据复制到用户空间。
例如:send函数将数据从用户缓冲区复制到TCP/IP内核发送缓冲区,通过内核来发送数据。
recv函数将数据从TCP/IP内核接收缓冲区发送到用户缓冲区,通过内核来接收数据。
2.应用程序可以通过它来修改各层协议的头部或其他数据结构,来控制底层通信的行为。
例如:通过setsockopt函数来设置IP数据报在网络上的存活时间。
2. 数据链路层
数据链路层实现了网卡的网络驱动程序,网络驱动程序屏蔽了物理网络的不同的电气特性,为上层协议提供了一个统一的接口。ARP:地址解析协议。主要是先IP地址到MAC地址的转换。
工作原理:主机B要获取主机A的物理地址,B向自己所在网络广播一个ARP请求,这个请求包含A的网络地址,B所在网络的所有节点都能接收到该请求,但只有A的网络地址与ARP请求的目标网络地址相同,所以只有A会回应一个ARP应答,其中包括自己的物理地址。
RARP:逆地址解析协议。
主要用于网络上没有存储设备的节点,因为没有存储设备所以其记不住自己的IP,只能通过其网卡上的物理地址向提供物理地址到网络地址映射的服务器,来查询自己的网络地址。
3. 网络层
网络层负责数据包的选路和转发,主要任务就是选择中间节点,确定两台主机之间的通信路径。IP协议根据数据包的IP地址来决定如何投递它。如果不能直接发送给主机,就寻找合适的下一跳路由器,由路由器来转发,多次重复直到目标主机。
ICMP协议主要用于网络连接测试。ICMP报文分为两大类:差错报文和查询报文。
1.差错报文:用来回应网络错误,比如目标不可达和重定向。
2.查询报文:用来查询网络,进行网络连接测试,如:ping命令。
4. 传输层
传输层为两台主机上的应用程序提供端到端的通信,不在乎底层网络传输细节,只关心通信的起始端和目的端。TCP:传输控制协议。为应用层提供可靠的,面向连接的,基于流的服务。
通信双方必须先建立TCP连接,会在内核中建立一个数据结构,包括连接状态,读写缓冲区,定时器等。通信结束需要关闭连接释放内核数据。
UDP:用户数据包协议。为应用程序提供不可靠,无连接,基于数据报的服务。
每个数据报都有一个长度,接收者必须以其为最小单位将所有内容一次性读出,否则数据将被截断。
SCTP:流控制传输协议。主要是为了在因特网上传输电话信号。
5. 应用层
在Linux环境中可以通过/etc/services文件查看所有应用层协议,以及使用的传输层服务是TCP还是UDP。主要运行在用户空间中来负责处理各应用程序的逻辑。
相关文章推荐
- Lua下基本的网络编程示例
- linux网络编程用到的网络函数详解用和使用示例
- C#网络编程基础之进程和线程详解
- C++ 网络编程 总结
- Linux网络编程之UDP Socket程序示例
- Android网络编程之UDP通信模型实例
- 谈谈新手如何学习PHP网络编程第1/2页
- Python 网络编程起步(Socket发送消息)
- c# socket网络编程接收发送数据示例代码
- NodeJS学习笔记之网络编程
- Java网络编程之简单的服务端客户端应用实例
- java网络编程之识别示例 获取主机网络接口列表
- Python 网络编程说明第1/2页
- python网络编程学习笔记(一)
- python socket网络编程步骤详解(socket套接字使用)
- python网络编程之TCP通信实例和socketserver框架使用例子
- Android网络编程之获取网络上的Json数据实例
- Java网络编程基础教程之Socket入门实例
- python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
- IOCP浅析[二]——IOCP出现的意义和函数接口