第一章 了解TCP/IP协议族
第一章 了解TCP/IP协议族
1.1 TCP/IP协议族体系结构以及主要协议
IP和TCP协议对编写程序具有最直接的影响,后面的章节会详细的讲到.
TCP/IP的体系结构有应用层,传输层,网络层,数据链路层(四层基本模型)
从主要拥有的协议来看:
在数据链路层中有RAP(Address Resolve Protocol,地址解析协议)和RARP(Reverse Address Resolve Protocol,逆地址解析协议)
在网络层有IP(Internet Protocol,因特网协议)
在传输层有TCP(Transmission Control Protocol,传输控制协议),UDP(User Datagram Protocol,用户数据协议)和SCTP(Stream Control Transmission Protocol,流控制传输协议)
在应用层有许多协议,例如我们熟知的telnet远程登录协议,OSPF(Open Shortest Path First,开放最短路径协议),
DNS(Domin Name Service,域名服务).
从主要功能来看:
数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输.利用其拥有的ARP协议完成了IP地址与机器物理地址之间(通常是MAC地址)的转换.在这一层上使用物理地址寻址一台机器.RARP仅用于无盘工作站 .
网络层实现数据包的选路与转发,因为通信的两台主机一般不是直接相连的,而是通过多个节点相连,此层的目的就是选择这些中间节点,以确定两台主机之间的通信路径.当数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳(next hop)路由器,并将数据包交付给该路由器来转发.IP协议使用逐级跳(hop by hop)的方式确定通信路径.ICMP是IP协议的重要补充,主要用于检测网络连接.
传输层为两台主机上的应用程序提供端到端(end to end)的通信,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程.
应用层负责处理应用程序的逻辑.
从所在内核/用户态来看:
数据链路层/网络层/传输层都在内核空间中实现,因为它们负责处理网络通信细节,必须得稳定高效.
应用层则在用户空间中实现,因为它负责处理众多逻辑,例如文件传输等,避免内核庞大故不会在内核中实现,但也有例外.
1.2 封装与分用
那么上层协议是如何使用下层协议提供的服务呢?
答: 封装(encapsulation)
那么封装的过程是怎么样的?
答: 应用程序数据在发送到物理网络之前,将沿着协议栈从上往下一次传递,每层协议都将在上层数据的基础上加上自己的头部信息(有时还有尾部信息),以实现该层的功能.
举个例子:
当发送端应用程序使用send函数向一个TCP连接写入数据时:
内核中TCP模块首先把这些数据复制到该连接对应的TCP内核发送缓冲区中,然后TCP模块调用IP模块提供的服务,传递的参数包括TCP头部信息和TCP发送缓冲区中的数据,即TCP报文段
经过IP封装后的数据称为IP数据段(IP Datagram)
经过数据链路层封装的称为帧(frame)
帧是最终在物理网络上传送的字节序列.
那么当帧到达目标主机时,应用程序是如何接受源主机发送的数据呢?
答: 分用(demultiplexing)
那么分用的过程是怎么样的?
答: 到达目标主机后,将沿着协议栈自底向上一次传递,各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序.
在顶层服务看来,封装和分用似乎没有发生过
1.5 ARP协议工作原理
ARP协议能实现任意网络层地址到任意地址的转换,不过本书仅讨论从IP地址到以太网地址(MAC地址)的转换.
一. ARP协议的工作原理为:
主机向所在的网络广播一个ARP请求,该请求会包含目标机器的网络地址.
此网络上的其他机器都将收到这个请求(使用tcpdump抓包能看到f4:xx:xx:xx:xx:2a > ff:ff:ff:ff:ff:ff,即发送了一条广播),但只有被请求的目标机器会回应一个ARP请求,其中包含自己的物理地址.
在ARP中也会实现一个高速缓冲,其中包含了最近访问的机器的IP地址到物理地址的映射,避免了重复的ARP请求.
二. 在Linux机器上执行"arp -a" #display (all) hosts in alternative (BSD) style.
结果如下:
? (192.168.1.100) at 0c:xx:xx:xx:xx:e4 [ether] on eth0
? (192.168.1.1) at f4:xx:xx:xx:xx:2a [ether] on eth0
? (192.168.1.106) at d4:xx:xx:xx:xx:98 [ether] on eth0
很好的显示了IP到MAC地址的映射
1.6 DNS工作原理
域名查询方式有很多种实现方式,比如NIS(Network Information Service,网络信息服务),DNS和本地静态文件等. 本节主要讨论DNS.
一. DNS工作原理
网络客户端程序使用DNS协议来向DNS服务器查询目标主机的IP地址.
主观表现为向DNS服务器提出请求,等待并接受回复.
二. 在Linux机器上访问DNS服务
First. 知道DNS服务器地址
pi@happyPi:~ $ cat /etc/resolv.conf
nameserver 172.16.8.8
nameserver 202.106.0.20
Second. 提出请求
ping www.baidu.com
Third. 收到回复
IP 192.168.1.108.53969 > 172.16.8.8.53: 15051+ A? www.baidu.com. (31)
IP 172.16.8.8.53 > 192.168.1.108.53969: 15051 3/5/5 CNAME www.a.shifen.com., A 119.75.217.109, A 119.75.218.70 (260)
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 119.75.217.109
www.a.shifen.com has address 119.75.218.70
我的机器向DNS服务器发起了请求("ping www.baidu.com" 引发 "192.168.1.108.53969 > 172.16.8.8.53")
并收到了它的回复(172.16.8.8.53 > 192.168.1.108.53969),告诉我www.baidu.com是www.a.shifen.com的别名.
还有两个地址,分别是119.75.217.109 和 119.75.218.70.
通过这两个IP我都可以得到www.baidu.com的页面(在目标页面允许通过IP访问的情况下).
1.7 socket和TCP/IP协议族的关系
由socket实现的 控制数据链路层/网络层/传输层协议 的API提供两个功能:
将应用程序数据从用户缓冲区中复制到TCP/UDP发送缓冲区,以交付内核来发送数据,或者是从内核TCP/UDP接收缓冲区中复制数据到用户缓冲区,以读取数据.
应用程序可以通过它们来修改内核中各层协议的某些头部信息或其他数据结构,从而精细地控制底层通信的行为.
socket是一套通用网络编程接口.
关于第一章的总结:
TCP/IP四层模型以及对应主要拥有的协议:应用层/传输层(TCP,UDP)/网络层(IP)/数据链路层(ARP)
这些协议对数据进行了封装和分用,使得顶层服务在发送与接收数据的时候觉得什么也没发生
ARP协议通过广播请求询问实现了IP与以太网地址的相互映射
DNS协议通过向DNS服务器发送请求并接收回复的形式实现域名到IP的映射
From
2017/1/16 19:52:22
第一章 了解TCP/IP协议族的更多相关文章
- 第12章 网络基础(1)_网络分层和TCP/IP协议族
1. 协议的概念 (1)计算机网络中实现通信必须有一些约定.如对速率.传输代码.代码结构.传输控制步骤和出错控制等约定,这些约定即被称为通信协议 (2)在两个节点之间要成功地进行通信,两个节点之间必须 ...
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- linux高性能服务器编程 (一) --Tcp/Ip协议族
前言: 在学习swoole入门基础的过程中,遇到了很多知识瓶颈,比方说多进程.多线程.以及进程池和线程池等都有诸多的疑惑.之前也有学习相关知识,但只是单纯的知识面了解.而没有真正的学习他们的来龙去脉. ...
- 服务器编程入门(1)TCP/IP协议族
问题聚焦: 简单地梳理一下TCP/IP各层的功能和常用协议 详细了解ARP(数据链路层)和DNS(应用层)协议的工作原理 1 TCP/IP协议族体系结构 数据链路层: 职责:实现网卡接口的网络 ...
- TCP/IP协议族(一) HTTP简介、请求方法与响应状态码
接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...
- OSI模型和TCP/IP协议族(一)
1990年以前,再数据通信和组网文献中占主导地位的分层模型是开放系统互连(Open System Interconnnection,OSI)模型.当时所有人都认为OSI模型将是数据通信的最终标准,然而 ...
- Linux 高性能服务器编程——TCP/IP协议族
1 TCP/IP协议族体系结构 数据链路层: 职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网.令牌环等)上的传输. 常用协议:ARP协议(地址解析协议),RARP协议 ...
- TCP/IP知识总结(TCP/IP协议族读书笔记二)
接下来,总结一下网络层的协议,IP,ARP,RARP,ICMP,IGMP.当我们在网络传输的过程中,把分组交付到主机或路由器需要两级地址:物理地址和逻辑地址.而且我们需要能够把物理地址映射成为相应的逻 ...
- TCP/IP协议族——IP工作原理及实例具体解释(上)
IP协议具体解释 本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包.来观察IP数据报传送过程中IP的格式,以及分片的过程. IP头部信息:IP头部信息出如今每一个 ...
随机推荐
- javascript-数字转罗马数字
阿拉伯数字与罗马数字转换 罗马数字表示 XXI, 21 个位数举例I, 1 ]II, 2] III, 3] IV, 4 ]V, 5 ]VI, 6] VII, 7] VIII,8 ]IX, 9 ·十位数 ...
- spring配置redis(xml+java方式)(最底层)
条件:引用好架包 <dependency> <groupId>org.springframework.data</groupId> <artifactId&g ...
- PAT——1008. 数组元素循环右移问题
一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 ...
- 【题解】洛谷P3959 [NOIP2017TG] 宝藏(状压DP+DFS)
洛谷P3959:https://www.luogu.org/problemnew/show/P3959 前言 NOIP2017时还很弱(现在也很弱 看出来是DP 但是并不会状压DP 现在看来思路并不复 ...
- UITableView控件Protocell的Identifier设置 注意事项
1. 注意:如果想使用Subtitle类型的单元格,需在Storyboard中将Protocell设置为subtitle类型,且Protocell的identifier必须与ViewControll ...
- webAPI请求消息过滤器
每当制作一个WebAPI,就必然会收到外部很多调用这个API的请求,有时候,我们希望,能从这些外部来的请求中,按照一定条件筛选过滤一下,只将那些我们觉得合法的,有必要回应的请求放进来,一方面挡住那些非 ...
- js和jquery对象的相互转换
在使用jquery的过程中发现很多需要将jquery对象转成js对象的例子. Query 对象是通过 jQuery 包装DOM 对象后产生的对象.jQuery 对象是 jQuery 独有的,其可以使用 ...
- Deferred Lighting
Deferred lighting separate lighting from rendering and make lighting a completely image-space techni ...
- iOS:文件操作相关(18-03-23更)
0.iOS文件系统 1.工程内文件 2.文件夹管理 3.文件操作 4.NSCache 附录: 1.沙盒文件夹.文件大小 2.清除沙盒 Library / Cache 下所有数据 3.测试plist 0 ...
- sort的用法
早一段时间一直没有理解sort的用法,在早几天终于是研究的明白的,所以就来分享一下,如果你也被这个方法困扰,没懂原理,可以看一下这遍文章,希望有所帮助. 第一种,最简单的排序,纯数字排序: var a ...