zoukankan      html  css  js  c++  java
  • Android网络编程系列 一 TCP/IP协议族之链路层

        这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流。

        数据链路层有三个目的:

    • 为IP模块发送和 接收IP数据报。
    • 为ARP模块发送ARP请求和接收ARP应答。
    • 为RARP发送RARP请 求和接收RARP应答

    ip大家都听说过。至于ARP和RARP,ARP叫做地址解析协议,是用IP地址换MAC地址的一种协议,而RARP则叫做逆地址解析协议,在tcp/ip协议的后面章节会介绍它们(在局域网里面用ARP协议可以很容易的搞瘫痪网络哦)

    数据链路层的协议还是很多的,有我们最常用的以太网(就是平时我们用的网卡)协议,也有不太常见的令牌环,还有FDDI,当然,还有国内现在相当普及的PPP协议(就是adsl宽带),以及一个loopback协议。

    联系linux里面的ifconfig -a命令,这个命令通常会得到如下的结果

    eth0 Link encap:Ethernet HWaddr 00:01:4A:03:5B:ED
    inet addr:192.168.11.2 Bcast:192.168.11.255 Mask:255.255.255.0
    inet6 addr: fe80::201:4aff:fe03:5bed/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:2819 errors:0 dropped:0 overruns:0 frame:0
    TX packets:76 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:241609 (235.9 KiB) TX bytes:9596 (9.3 KiB)
    
    lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:2713 errors:0 dropped:0 overruns:0 frame:0
    TX packets:2713 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:3516032 (3.3 MiB) TX bytes:3516032 (3.3 MiB)

        其中,eth0就是以太网接口,而lo则是loopback接口。这也说明这个主机在网络链路层上至少支持loopback协议和以太网协议。

    以太网(Ether-net)的定是指数字设备公司( Digital Equipment Corp.)、英特尔公司(Intel Corp.)和Xerox公司在1982年联合公布的一个标准,这个标准里面使用了一种称作CSMA/CD的接入方法。而IEEE802提供的标准集802.3(还有一部分定义到了802.2中)也提供了一个CSMA/CD的标准。这两个标准稍有不同,TCP/IP协议对这种情况的处理方式如下:

    • 以太网的IP数据报封装在RFC894中定义,而IEEE802网络的IP数据报封装在RFC1042中定义。
    • 一台主机一定要能发送和接收RFC894定义的数据报。
    • 一台主机可以接收RFC894和RFC1042的封装格式的混合数据报。
    • 一台主机也许能够发送RFC1042数据报。。如果主机能同时发送两种类型的分组数 据,那么发送的分组必须是可以设置的,而且默认条件下必须是RFC 894分组。

    可见,RFC1042在TCP/IP里面处于一个配角的地位。这两种不同的数据报格式请参考教材。

    ppp(点对点协议)是从SLIP的替代品。他们都提供了一种低速接入的解决方案。而每一种数据链路层协议,都有一个MTU(最大传输单元)定义,在这个定义下面,如果IP数据报过大,则要进行分片(fragmentation),使得每片都小于MTU,注意PPP的MTU并不是一个物理定义,而是指一个逻辑定义(个人认为就是用程序控制)。可以用netstat来打印出MTU的结果,比如键入netstat -in

    Kernel Interface table
    Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
    eth0       1500   0     1774      0      0      0      587      0      0      0 BMRU
    lo        16436   0     2667      0      0      0     2667      0      0      0 LRU
    

      

    就可以观察到eth0的MTU是1500。而lo(环回接口)的MTU则是16436。

        最后说说那个环回接口(loopback)。平时我们用127.0.0.1来尝试自己的机器服务器好使不好使。走的就是这个loopback接口。对于环回接口,有如下三点值得注意:

    • 传给环回地址(一般是127.0.0.1)的任何数据均作为I P输入。
    • 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是 因为广播传送和多播传送的定义包含主机本身。
    • 任何传给该主机IP地址的数据均送到环回接口。

    转载:http://blog.csdn.net/goodboy1881/article/details/665061

  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/kevinOne/p/4500431.html
Copyright © 2011-2022 走看看