第一章 TCP/IP协议族

一、协议族体系结构

  TCP/IP协议族分为四层协议系统,自底向下分别为数据链路层、网络层、传输层、应用层。

  数据链路层常用ARP(地址解析协议)和RARP(逆地址解析协议)。在网络层使用IP寻址,而在数据链路层使用物理地址寻址,ARP就是将IP地址转化为物理地址供数据链路层使用。RARP将物理地址映射为IP地址,适用于某些无盘工作站(不能储存自己的IP)向服务器查询。

  网络层实现数据包的选路和转发。选择中间节点(路由器),确定两台主机之间的通信路径。网络层的核心协议是IP协议,IP协议根据数据包的目的IP地址来选择如何投递:选择合适的下一跳并交给路由器转发。另一个重要协议是ICMP协议,分为两类差错报文和查询报文。

  传输层为两台计算机上的应用程序提供端到端的通信,只关心起始端和目的端不在乎数据包的中转过程。

  其中实线表示各层之间的实体通信,虚线箭头表示逻辑通信线路。

  传输层主要协议有三个:TCP协议、UDP协议和SCTP协议。TCP为应用层提供可靠的、面向连接的和基于流的服务。UPD为应用层提供不可靠、无连接和基于数据报的服务。SCTP是一种较新的传输层协议,为因特网上传输电话信号而设计。

  应用层负责处理应用程序的逻辑。其他层需要保证稳定高效都在内核空间中实现,应用层在用户空间中实现。其中在应用层主要有:ping应用程序,它不是协议。telnet协议是一种远程登陆协议。

二、封装

  应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递。没层协议都在上层数据的基础上加上自己的头部信息(有时还包含尾部信息),以实现该层的功能。

  经过数据链路层封装的数据称为帧,传输媒介不同,帧的类型也不同。在以太网上传输以太网帧,令牌环网络上传输令牌环帧。以太网帧最大携带1500字节数据,所以过长的IP数据包需要分片。

三、分用

  当帧到达目的主机时,将沿着协议栈自底向上传递。各层协议依次处理帧中本层负责的头部数据,最终将帧交给目标应用程序,这个过程称为分用。

四、ARP协议工作原理

  主机向自己所在的网络广播一个ARP请求,该请求包含目的机器的网络地址。此网络上的其他机器都将收到这个请求,但只有被请求的机器会回应一个ARP应答,其中包含自己的物理地址。(知道他人的IP后通过IP找到他人的物理地址)

五、DNS工作原理

  DNS是一套分布式域名服务系统。每个DNS服务器上存放着大量的机器名和IP地址的映射。DNS查询和应答报文如下:

 

转载于:https://www.cnblogs.com/lr1402585172/p/10999816.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux多线程——使用信号量同步线程

http://blog.csdn.net/ljianhui/article/details/10813469/ 信号量、同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已。但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于进程间通信…

C++11新特性之八——函数对象function

http://www.cnblogs.com/yyxt/p/3987717.html 详细请看《C Primer plus》(第六版中文版) http://www.cnblogs.com/lvpengms/archive/2011/02/21/1960078.html 备注: 函数对象: 尽管函数指针被广泛用于实现函数回调,但C还提供了一个重要的实现…

从零开始学C++之STL(八):函数对象、 函数对象与容器、函数对象与算法

http://blog.csdn.net/jnu_simba/article/details/9500219 一、函数对象 1、函数对象(function object)也称为仿函数(functor) 2、一个行为类似函数的对象,它可以没有参数,也可以带有若干参数。 3、任何重载…

树状数组初步理解

学习树状数组已经两周了,之前偷懒一直没有写,赶紧补上防止自己忘记(虽然好像已经忘得差不多了)。 作为一种经常处理区间问题的数据结构,它和线段树、分块一样,核心就是将区间分成许多个小区间然后通过对大区…

Linux socket编程(二) 服务器与客户端的通信

http://www.cnblogs.com/-Lei/archive/2012/09/04/2670964.html上一篇写了对套接字操作的封装,这一节使用已封装好的Socket类实现服务器与客户端的通信(Socket的定义见上篇Socket.h) 服务器端: ServerSocket.h #ifndef SERVERSOCKET_H #defin…

UNIX网络编程:I/O复用技术(select、poll、epoll)

http://blog.csdn.net/dandelion_gong/article/details/51673085 Unix下可用的I/O模型一共有五种:阻塞I/O 、非阻塞I/O 、I/O复用 、信号驱动I/O 、异步I/O。此处我们主要介绍第三种I/O符复用。 I/O复用的功能:如果一个或多个I/O条件满足(输…

解决iex -S mix报错

执行iex -S mix命令的时候会遇到如下错误: 执行 mix deps.get 然后就可以运行 iex -S mix了 其中,有可能会出现 按照其网站下载相应文件,复制到项目根目录下,然后执行命令(mix local.rebar rebar ./rebar)即…

Anker—工作学习笔记

http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html 1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符&am…

Linux网络编程——tcp并发服务器(I/O复用之select

http://blog.csdn.net/lianghe_work/article/details/46519633 与多线程、多进程相比,I/O复用最大的优势是系统开销小,系统不需要建立新的进程或者线程,也不必维护这些线程和进程。 代码示例: [csharp] view plaincopy #include &…

Linux下的I/O复用与epoll详解

http://www.cnblogs.com/lojunren/p/3856290.html 前言 I/O多路复用有很多种实现。在linux上,2.4内核前主要是select和poll,自Linux 2.6内核正式引入epoll以来,epoll已经成为了目前实现高性能网络服务器的必备技术。尽管他们的使用方法不尽相…

数据结构--顺序栈和链式栈

http://www.cnblogs.com/jingliming/p/4602458.html 栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈,栈又称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈顺序栈是利用一组地址连续的存储单元&#xf…

数据结构--双链表的创建和操作

http://www.cnblogs.com/jingliming/p/4602144.html#0-tsina-1-42616-397232819ff9a47a7b7e80a40613cfe1 一、双向链表的定义 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以&#xff0c…

MYSQL错误代码#1045 Access denied for user 'root'@'localhost'

http://blog.csdn.net/lykezhan/article/details/70880845 遇到MYSQL“错误代码#1045 Access denied for user rootlocalhost (using password:YES)” 需要重置root账号权限密码,这个一般还真不好解决。 不过,这几天调试的时候真的遇到了这种问题&#x…

常量变量以及循环

常量 1.三目运算词 三字母词表达字符???([??)]??<{??>} 2.循环 1).数组元素以及变量在内存中的分配顺序 2)goto语句应用 //电脑关机程序 #include<stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> int ma…

Linux 环境 C语言 操作MySql 的接口范例

http://www.cnblogs.com/wunaozai/p/3876134.html 接上一小节&#xff0c;本来是计划这一节用来讲数据库的增删改查&#xff0c;但是在实现的过程中&#xff0c;出现了一点小问题&#xff0c;也不是技术的问题&#xff0c;就是在字符界面上比较不好操作。比如要注册一个帐号&a…

数组相关运算

数组的初始化 数组及指针在内存中的存储 一维数组在内存中的存储 有关数组的运算 //一维数组 int a[] {1,2,3,4}; printf("%d\n",sizeof(a));//16这里的a表示的是整个数组,计算出的是整个数组的大小,单位为byte printf("%d\n",sizeof(a 0));/*a没有单独…

gets fgets 区别

http://www.cnblogs.com/aexin/p/3908003.html 1. gets与fgets gets函数原型&#xff1a;char*gets(char*buffer);//读取字符到数组&#xff1a;gets(str);str为数组名。 gets函数功能&#xff1a;从键盘上输入字符&#xff0c;直至接受到换行符或EOF时停止&#xff0c;并将读取…

Shuffle'm Up——简单模拟

【题目描述】 A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuffling chips is performed by starting with two stacks of poker chips, S1 and S2, each stack containing C chips. Each stack may contain chips of several diff…

Fire!——两个BFS

【题目描述】 【题目分析】 看到题目后很清楚是两个BFS&#xff0c;可是我觉得对于火的BFS可以转换成判断&#xff0c;我的做法是将火的位置全部记录下来&#xff0c;然后判断某个位置距离每个火的步数是否小于当前步数&#xff0c;可是错了&#xff0c;还不清楚为什么&#x…

函数调用过程(栈桢)

栈桢 首先来看一段代码 #include<stdio.h> int add(int x, int y) {int z x y;return z; } int main() {int a 10;int b 20;int ret add(a, b);printf("ret %d\n",ret);return 0; } 此处是为了给a,b分别开辟空间,这时栈桢如图所示 两条push命令将a,b变…