非常好的文章 ---- 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地址分为:网络段+主机端 一个网络段就代表一个子网。这个可以参考:
http://en.wikipedia.org/wiki/IP_address
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的数据包,当发现发给我的数据包后,应答的时候,就把源地址与目标地址互相换下,再发给对方。其实发送方并不知道数据包是否真的发给了对方。
八、参考资料
大学课程《计算机网络》第四版
九、特别说明:
大部分的图片来自网络,特别是wikiped。作者:阿里巴巴封神悟
【您感觉软件人员应该掌握哪些网络呢? 请留下您的言论吧。您的言论是我前进最大的动力。】
分享到:
相关推荐
【软件工程+网络系统工程师】是信息技术领域中的关键角色,这个职业涵盖了软件开发和网络基础设施的管理。这份2018年的求职简历展示了该行业的专业技能和经验要求。 1. **专业背景**:软件工程和网络系统工程师需要...
标题:软件测试工程师面试问题 描述与标签:这份文档提供了软件测试工程师面试中常见的问题集,旨在帮助求职者准备面试,同时也为招聘方提供了一套评估候选人能力的标准框架。 知识点详解: 1. **参与测试和质量...
计算机四级考试网络工程师巩固练习及答案涵盖了多个网络技术领域的知识点,包括网络文件系统、协议、网络管理、计费管理、网络故障处理、网络管理模式以及操作系统和进程管理。 1. **NFS (Network File System)**: ...
【网络职位说明书-软件行业】概述 网络职位在软件行业中扮演着至关重要的角色,负责确保公司的网络基础设施稳定、高效地运行。本职位说明书详细描述了不同级别的网络职位职责,从基础到高级,涵盖了一系列关键任务...
《软件工程师职业规划》 软件工程师,作为信息技术领域的重要角色,其职业规划是每位从业者都需要深思熟虑的问题。这份“参考资料-软件工程师职业规划.zip”压缩包内包含的“软件工程师职业规划.pdf”文件,将为...
以上就是从软件工程师年度述职报告中提炼出的关键知识点,这些内容涵盖了软件开发过程中的多个方面,包括项目管理、团队协作、个人技能提升、客户服务以及职业道德等,对于软件工程师的职业发展具有重要的指导意义。
综上所述,这些资料为学习和实践GSM网络优化提供了全面的视角,涵盖了从基础理论到实际操作的各个层面,对于网络工程师和相关人员来说,是一份宝贵的参考资料。通过深入学习和理解这些内容,读者可以具备解决GSM网络...
通过上述章节的知识点介绍可以看出,《软件工程师找工作150问》几乎涵盖了软件工程师在面试中可能会遇到的所有技术方向。无论是基础知识还是高级技术,都能在本书中找到对应的讲解。这对于准备面试的软件工程师来说...
《网络安全工程师创新能力培养体系的研究》是一份深入探讨网络安全专业人才教育与发展的文献,结合数据库审计这一关键领域,为提升安全活动中的实战能力提供了全面的视角。文档内容可能涵盖了多个方面,包括但不限于...
本文将深入探讨《IT系统视图和视角》这一主题,该文档由IBM公司的三位专家编写,分别是软件工程师Denise Cook、高级IT架构师Peter Cripps以及执行IT架构师Philippe Spaas。本文档于2007年12月发布,重点介绍了IBM的...
5. **人**:强调人在软件工程中的作用,包括团队合作、沟通技巧、职业道德、软件工程师的持续学习和职业发展。 6. **工具**:介绍软件开发中使用的各种工具,如版本控制系统、自动化构建工具、集成开发环境、测试...
在【标题】中提到了“2020年下半年信息安全工程师下午真题及答案解析.pdf”,这是一份关于信息安全工程师资格认证考试的真题资料,涉及到的信息安全工程师是负责企业信息安全的专业人员,需要具备防范网络攻击、保护...
全国计算机四级网络工程师考试中的知识点涵盖了操作系统、进程线程模型、并发与同步、内存管理和通信机制等多个方面。以下是对这些知识点的详细解释: **操作系统概论** 操作系统是计算机系统的核心,它在硬件之上...
根据提供的文件内容,本报告涵盖了2021年云南省地区互联网软件开发工程师岗位薪酬水平的最新数据,同时介绍了全国各地区常用岗位的薪酬水平。报告中列举了不同企业类型包括外资企业、合资企业、本地私营企业和国有...
例如,可以通过立体视角展现楼层间的网络布局,或者突出显示关键设备的位置,帮助决策者更好地理解整个网络的运行状态。 此外,Visio还支持导入和导出数据,可以与数据库或项目管理软件集成,动态更新网络图,反映...
软件工程师不是机器人,许多软件工程师在工作方式上有很大差别,在技能水平、主动性、服从性、一致性和责任心方面也有巨大差异。 Ivar Jacobson 给出了一个非常有用的论述:敏捷已经成为当今描述现代软件过程的时髦...
嵌入式软件开发是计算机科学领域的一个重要分支,它涉及到硬件和软件的...以上这些知识点是嵌入式软件开发工程师在笔试和面试中可能遇到的,通过学习和实践,可以不断提升自己的专业技能,更好地应对实际项目的需求。
总的来说,3D看图软件支持UG8.5是一个对工程师、设计师和项目管理者非常有价值的工具,它简化了查看和交流3D模型的过程,提高了工作效率。不论是在设计验证、生产准备还是售后支持阶段,都能够发挥重要作用。