Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7172161
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类:

2012-04-17 12:08:08

http://blog.csdn.net/bxyz1203/article/details/7463251

一、概述

     在以太网中,我们都很清楚网络的分层模型,ISO模型7层:物理层、数据链路层、网络层、传输层、会 话层、表示层、应用层。TCP/IP模型四层协议:主机至网络层、互联网层、传输层、应用层。 在实际应用中我们都是用TCP/IP的模型。下面我讲下软件设计需要了解的网络知识,个人感觉软件工程师应该知道这些知识的,当然也是些基础的网络知识。 主要从从物理层、数据链路层、互联网层、传输层、应用层的角度。 对于网络设备,集线器工作在网络层;2层交换机在链路层;3层交换机在网络层、链路层;路由器在网络层;负载均衡一般是在传输层,也有应用层、网络层、链 路层的。防火墙也一般是穿层。不过,以上也不是绝对的。现在的一些设备基本没有固定的层次,基本都是穿层的。

以下这张图是经典的网络逻辑图:


数据是一层一层封装的。如下图所示:


二、物理层
物理层涉及到通信信道上面传输的原始的数据位。简单地讲,怎么用电压表示0或者1。也涉及到传输介质的问题。磁介质有:双绞线、同轴电缆、光纤。还有无限传输等问题。其中也涉及到著名的香浓定理。不深入讲,软件设计人员涉及较少。

三、数据链路层
将一个原始的传输设施转变成一条逻辑的传输线路。主要是将上层的数据拆开,分装到数据帧中,然后顺序的发送。其中涉及到怎么成帧、错误控制、流控制、检测与校验。
Internet是用PPP(point-to-point Protocol)作为点到点线路的基本数据链路协议。此协议中涉及到一个重要的数据:MTU(Maximum Transmission Unit,MTU),默认是1500,此数据在网络编程数据传输中还是很重要的。
 介质访问控制子层:MAC(Medium Access Control)子层,这个就存在大家熟悉的mac地址,48位,也就是熟悉的网卡地址。此子层可以是多播与广播的帧给网卡的。

四、网络层
控制子网的运行,在以太网中,最重要的数据协议是:IP协议。其他的传输拓扑协议,如:OSPF、BGP我们不关心。ipv4协议:其中Source IP Address就是源地址。


IP地址分为:网络段+主机端 一个网络段就代表一个子网。这个可以参考:

IPv4地址是非常缺乏的,这个跟当时的设计有关系。为此引入了NAT,此有很多争议,但是这个解决ipv4的ip缺乏问题,也不乏是一个好的方案。
以下是其中的一种结构,简单地讲就是:就是把无连接的网络做成了面向连接的网络。引入了传输层端口的概念。


另外还有:ARP(address resolution protocol)\RARP(reverse address resolution protocol)
DHCP(dynamic host configuration protocol)

四、传输层
是协议层次的核心所在,它的任务是在原机器和目标机器之间提供可靠的、性价比合理的数据传输功能,并且与当前所使用的物理网络完全独立。他是端到端的,与点到点的最大的区别是跨网络。
传输层的核心概念.socket,端口的概念。在一些操作系统低于1024是有特别用途的。
用途最广的是TCP协议:
TCP的Header如下所示:


到传输层,才有了连接的概念了。在传输层以下是不用面向连接的(也就是直接扔包,直接存储转发掉。),第一张图,data flow基本说明了传输层的含义。
TCP连接连接建立需要三次握手,断开连接是四次握手【因为TCP是双工的,断开需要一方申请且另一方确认的,连接的时候可以把sync、ack合为一个】。如下是 TCP链接管理有限状态机: 

以下是握手及断开的过程,参考上图看:



五、应用层
就是实际的网络应用了,这里就千奇百怪了,想深入了解那块,就google吧。目前大约有:DNS、e-mail、万维网(其中涉及http)等等。。。
大部分的软件从业人员都工作在此层的。

有一些应用就用传输层低于1024的端口,如 HTTP的80端口。当然这些都可以更改,没有绝对的。

六、一个关于传输层连接的例子
我从家的机器访问公司的网络,通过netstat查看得到:
client的情况为:

家里路由器的出口ip为:60.176.147.50(中国电信的租用地址)

公司服务器的情况:

为此我画了以下的拓补图:(我们这里还是非三角模式,就不是修改mac地址的。)

主要解释下连接的事情,连接是传输层的事情。下层是不存在的连接的事情。为什么存在端口,原因还是应用层程序通过监听端口来区分不同的线程的。

从client上发起与服务器的三次握手连接后,连接建立起来,但是双方的目标ip都不是对方的ip。怎么建立的呢?图中也给出一些答案。
这个关键的就是NAT做了手脚。建立连接本质就是要分析tcp的数据包,当发现发给我的数据包后,应答的时候,就把源地址目标地址互相换下,再发给对方。其实发送方并不知道数据包是否真的发给了对方。

七、参考资料
tcp:
ipv4:
NAT:
大学课程《计算机网络》第四版

八、特别说明:
     大部分的图片来自网络,特别是wikiped。作者:阿里巴巴封神悟


阅读(316) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~