网络编程学习笔记,

原创 2016年08月29日 01:30:45

说起来很惭愧,我本科专业是网络工程,但是对网络方面的知识学习还是不怎么样。随着工作的不断深入,发现自己的这方面的知识异常缺乏,最近也开始恶补了起来,这篇就是我这个星期看tcp/ip协议详解卷一的chapter1到10的简要笔记。

tcp/ip协议栈有四个层次,分别是链路层,网络层,传输层,应用层。这四个层次把计算机网络里面的功能进行了比较高度的抽象分类,每一层有自己的相应负责的功能。简单的说就是链路层负责处理底层网络接口的通信细节,网络层负责提供网络分组的服务,运输层负责提供应用程序端口到端口的通信,应用层负责提供特定应用服务。

ARP和RARP工作在链路层,ARP提供查询目的ip对应的目的网卡硬件地址,RARP则是一个逆操作,主要是提供给无盘工作站启动时由自己的网卡硬件地址查询自身IP的功能。IP,ICMP,IGMP工作在网络层,IP协议相当于提供了通信过程中到达目的接口的途径,类比生活中的门牌号码,ICMP则是一个工作在网络层的负责传递网络状态相关信息的协议。TCP和UDP则工作于运输层,提供各种质量的网络传输服务。

第二张关于链路层的知识大多数是硬件层次的介绍,在此暂时略去。传给环回接口的数据还是会走tcp/ip协议栈,只是在传输层的时候如果检测到是环回地址就把要发送的IP数据报直接返回给自己,不会进入网络。链路层的协议一般都对数据帧长度做出了限制,这个限制我们成为MTU。由于现实中网络的情况复杂,很可能在一个通信链路上的各处MTU不一样,所以需要一个发现路径MTU的机制。

IP协议是整个tcp/ip协议栈的核心,tcp,udp,icmp,igmp都是走ip协议的。IP协议提供不可靠无连接的服务,简单地说就他告诉了你怎样寻路可以送到对方主机,但是仅此而已,不保证一定能送达,也不保证谁会先到。在IP层里维护着一个路由表,要发送数据的时候,IP要做的是把目的IP地址跟路由表的表项进行匹配,找到能匹配的表目后,发送给指定的下一跳地址;如果匹配失败就生成主机不可达或网络不可达错误。子网寻址是为了解决大量的IP主机号被浪费的问题,子网掩码是用来告诉程序给定的IP地址有多少位用于子网号。

ARP为IP地址到对应的硬件地址之间提供动态映射。在IP层找到下一跳的IP之后,链路层需要知道这个IP对应的硬件地址,这个时候链路层就需要查询ARP高速缓存,如果不存在相应的表项的话,就会广播一个ARP请求,向所有收到的主机询问这个IP的硬件地址,如果接收到的主机发现这份ARP请求询问的是自身的ARP地址的话,就会对这个请求进行应答。如果不存在对应主机可以应答这个请求,ARP协议会重复尝试请求,在一段时候后依然没有应答的话才会放弃。ARP代理允许路由器代为应答某个对应网络的ARP请求。免费ARP是指系统启动时,主机发送一个请求自身IP的ARP请求,这样做可以检测当前网络中是否有与自己IP冲突的主机,并且主机会利用收到ARP请求来更新旧的ARP表项。

RARP是用于没法在系统启动的过程中从硬盘引导IP地址的协议,在引导的时候发送一个带有自身接口硬件地址的RARP请求,从RARP服务器上读取自身的IP地址。

ICMP是直接使用IP数据报传输的,ICMP报文分查询报文和差错报文两种。ICMP地址掩码请求用于无盘系统获取自身的子网掩码,类似于RARP获取IP地址,通过广播找到应答的服务器。ICMP时间戳请求用于向另外一个系统查询当前时间。ICMP差错报文有一种叫ICMP端口不可达报文,它是ICMP目的不可达报文的一种。在UDP传输的过程中如果发现收到一个数据报无法与一个使用该端口的程序匹配的话,UDP就会返回一个ICMP端口不可达报文。

IP选路其实就是搜索路由表,而怎么维护更新路由表则是最重要的问题,这称之为选路策略。路由表可以由系统引导的时候从硬盘中初始化,同时在初始化接口的时候也会为接口创建一个直接路由。ICMP重定向差错出现在路由器发现一份数据报发送和接收的接口一样的时候,这个时候说明了在发送到指定目的IP的链路中,该路由是可以跳过的,通知上一级新的路由选项。ICMP路由器发现报文可以用于主机在引导时广播请求路由器响应一份通告报文。此外路由器也会定期广播发送通告报文,通告接收到的主机更新路由表。

上一段讨论的是静态选路,这一段我们讨论动态选路。动态选路用于路由器之间的通信,根据使用范围不一样可以分为IGP和EGP。IGP用的比较多的是RIP和OSPF,RIP在启动时会向本地的所有接口发送请求报文要求其他路由器把自己的完整路由表发送过来,利用收到的应答更新路由表。完成这个过程之后,每过一段时间路由器会将其当前完整的路由表通告给相邻路由器。OSPF协议采取的是每个路由器主动地测试与相邻路由的状态。

Socket网络编程学习笔记(1)

  • 2009年06月22日 22:47
  • 32KB
  • 下载

Socket网络编程学习笔记(4)

  • 2008年11月05日 03:56
  • 32KB
  • 下载

Linux+C学习笔记之网络编程

1.网络编程不得不提的三大知识点:  (1)IO流(设备:控制台(键盘和显示器标准的输入输出设备),文件,网络socket)  IO流操作的三大步骤:定义流对象,数据的传输和转移,关闭流对象  ...

Socket网络编程学习笔记

  • 2008年10月18日 22:29
  • 216KB
  • 下载

c++网络编程学习笔记

  • 2011年05月05日 10:47
  • 165KB
  • 下载

UNIX网络编程卷一:套接字联网API(学习笔记一)

UNIX网络编程卷一:套接字联网API(学习笔记一)

ACE网络编程学习笔记

  • 2012年04月18日 18:42
  • 1.91MB
  • 下载

网络编程(学习笔记)

  • 2011年04月24日 20:54
  • 11.49MB
  • 下载

网络编程学习笔记(ICMPv6和IPv6套接口选项)

ICMPv6套接口选项级别为IPPROTO_ICMPV6

asp.net 2.0 网络编程学习笔记源代码

  • 2008年09月06日 01:03
  • 8.57MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络编程学习笔记,
举报原因:
原因补充:

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