网络编程学习笔记,

原创 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协议采取的是每个路由器主动地测试与相邻路由的状态。

网络编程学习笔记一

本学期开始学习网络编程,第一个任务是学时TCP/IP客户端服务器的搭建 用C写服务器端(Server.cpp) #pragma comment(lib, "ws2_32.lib")//预编译 #inc...
  • letianxf
  • letianxf
  • 2017年02月22日 21:28
  • 149

unix网络编程 学习笔记(精华)

1.1 客户端程序和服务端程序  网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.  网络程序是先有服务器程序启动,等待客户端的程序运行并建立连接.一般的...
  • XuLujunCSDN
  • XuLujunCSDN
  • 2017年05月26日 15:33
  • 519

2016实习的学习笔记VS2013-网络编程

ping -a ip获取ip地址
  • shursulei
  • shursulei
  • 2016年08月15日 16:42
  • 342

php 编程笔记分享 - 非常实用

php strstr 判断一个字符串是否存在于里一个字符串中 php stristr() 函数查找字符串在另一字符串中的第一次出现 php strchr() 函数查找字符串在另一字符串中的第一次出现 ...
  • wuxiaopeng_1986
  • wuxiaopeng_1986
  • 2016年05月27日 22:37
  • 570

Learning hard C#学习笔记

委托: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespac...
  • husheng0
  • husheng0
  • 2016年04月25日 02:55
  • 1794

网络编程学习笔记二(实现一个基于简单TCP的用户注册程序)

•实现一个基于简单TCP的用户注册程序,实现下列功能 –客户端发送用户注册信息(用户名、密码和其他资料)到服务器端; –服务器端首先检查用户注册数据是否符合格式。如不符合则返回“非法访问”提示; –如...
  • letianxf
  • letianxf
  • 2017年02月24日 15:20
  • 780

网络编程学习笔记

1. 网络分层:    T C P / I P协议族分为四层:链路层、网络层、运输层和应用层,每一层各有不同的责任。在T C P / I P中,网络层和运输层之间的区别是最为关键的:网络层( I P)...
  • agan4014
  • agan4014
  • 2008年02月27日 13:26
  • 653

网络编程 学习笔记

TCP 传输控制协议  保障了两个应用程序之间的可靠通信  通常用于互联网协议   UDP 用户数据报协议  提供了应用程序之间要发送的数据的数据包 Socket 编程  套接字使用了tcp提供了两台...
  • qq_38767992
  • qq_38767992
  • 2017年11月14日 14:34
  • 37

Linux 网络编程——TCP编程

概述TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 具有以下特点:1)电话系统服务模式的抽象2)每一次完...
  • tennysonsky
  • tennysonsky
  • 2015年05月12日 12:33
  • 30542

学习笔记---网络编程

String.getBytes();方法可以转化为一个byte数组。即byte[] =s.getBytes(); 网络技术编程 一、客户端编程步骤 1、  简历网络连接。需要制定连接到的服务器的IP地...
  • fengzy1990
  • fengzy1990
  • 2014年07月08日 21:01
  • 2517
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络编程学习笔记,
举报原因:
原因补充:

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