码出高效:Java开发手册-第1章(4)

简介: 本书源于影响了全球250万名开发工程师的《阿里巴巴Java开发手册》,作者静心沉淀,对Java规约的来龙去脉进行了全面而彻底的内容梳理。本书以实战为中心,以新颖的角度全面阐述面向对象理论,逐步深入地探索怎样成为一位优秀开发工程师。比如:如何驾轻就熟地使用各类集合框架;如何得心应手地处理高并发多线程问题;如何顺其自然地写出可读性强、可维护性好的优雅代码。 本书旁征博引、文风轻松,秉持“图胜于表,表胜于言”的理念,深入浅出地将计算机基础、面向对象思想、JVM探源、数据结构与集合、并发与多线程、单元测试等知识客观、立体地呈现出来。紧扣学以致用......

1.5 TCP/IP

1.5.1 网络协议

      在计算机诞生后,从单机模式应用发展到将多台计算机连接起来,形成计算机网络,使信息共享、多机协作、大规模计算等成为现实,历经了20 多年的时间。计算机网络需要解决的第一个问题是如何无障碍地发送和接收数据。而这个发送和接收数据的过程需要相应的协议来支撑,按互相可以理解的方式进行数据的打包与解包,使不同厂商的设备在不同类型的操作系统上实现顺畅的网络通信。

      TCP/IP(Transmission Control Protocol / Internet Protocol)中文译为传输控制协议/ 因特网互联协议,这个大家族里的其他知名协议还有HTTP、HTTPS、FTP、SMTP、UDP、ARP、PPP、IEEE 802.x 等。TCP/IP 是当前流行的网络传输协议框架,从严格意义上讲它是一个协议族,因为TCP、IP 是其中最为核心的协议,所以就把该协议族称为TCP/IP。而另一个是耳熟能详的ISO/OSI 的七层传输协议,其中OSI(Open System Interconnection)的出发点是想设计出计算机世界通用的网络通信基本框架,它已经被淘汰,本节略过。

      TCP/IP 是在不断解决实际问题中成长起来的协议族,是经过市场检验的事实标准,已经很难被取代。就像即使键盘的布局不那么合理,比如字母A 被设计在左手小指位置,不利于敲击,但原来的键盘布局已经成为群体习惯的事实标准。TCP 分层框架图如图1-12 所示,为了表示网络拓扑图在连接层面上的机器对等理念,故图1-12中采用A 机器和B 机器的说法,而不是服务器和客户端的说法。

12.jpg

图1-12 TCP/IP 协议分层框架

  • 链路层:单个0、1是没有意义的,链路层以字节为单位把0与1进行分组,定义数据帧,写入源和目标机器的物理地址、数据、校验位来传输数据。图1-13所示是以太网的帧协议。

13.jpg

图1-13 链路层报文结构

      MAC 地址长6 个字节共48 位,通常使用十六进制数表示。使用ifconfig -a 命令即可看到MAC 地址。如图1-14 所示的f4:5c:89,即前24 位由管理机构统一分配,后24 位由厂商自己分配,保证网卡全球唯一。网卡就像家庭地址一样,是计算机世界范围内的唯一标识。

14.jpg

图1-14 MAC 地址

  • 网络层:根据IP定义网络地址,区分网段。子网内根据地址解析协议(ARP)进行MAC 寻址,子网外进行路由转发数据包,这个数据包即IP 数据包。
  • 传输层:数据包通过网络层发送到目标计算机后,应用程序在传输层定义逻辑端口,确认身份后,将数据包交给应用程序,实现端口到端口间通信。最典型的传输层协议是UDP 和TCP。UDP 只是在IP 数据包上增加端口等部分信息,是面向无连接的,是不可靠传输,多用于视频通信、电话会议等(即使少一帧数据也无妨)。与之相反,TCP 是面向连接的。所谓面向连接,是一种端到端间通过失败重传机制建立的可靠数据传输方式,给人感觉是有一条固定的通路承载着数据的可靠传输。
  • 应用层:传输层的数据到达应用程序时,以某种统一规定的协议格式解读数据。比如,E-mail 在各个公司的程序界面、操作、管理方式都不一样,但是都能够读取邮件内容,是因为SMTP 协议就像传统的书信格式一样,按规定填写邮编及收信人信息。

      总结一下,程序在发送消息时,应用层按既定的协议打包数据,随后由传输层加上双方的端口号,由网络层加上双方的IP 地址,由链路层加上双方的MAC 地址,并将数据拆分成数据帧,经过多个路由器和网关后,到达目标机器。简而言之,就是按“端口→ IP 地址→ MAC 地址”这样的路径进行数据的封装和发送,解包的时候反过来操作即可。

1.5.2 IP 协议

      IP 是面向无连接、无状态的,没有额外的机制保证发送的包是否有序到达。IP首先规定出IP 地址格式,该地址相当于在逻辑意义上进行了网段的划分,给每台计算机额外设置了一个唯一的详细地址。既然链路层可以通过唯一的MAC 地址找到机器,为什么还需要通过唯一的IP 地址再来标识呢?简单地说,在世界范围内,不可能通过广播的方式,从数以千万计的计算机里找到目标MAC 地址的计算机而不超时。在数据投递时就需要对地址进行分层管理。举个例子,一个重要快递从美国发出,要发给中国浙江省台州市某小区的X 先生。快递公司需要先确定中国的转运中心(如浙江某转运中心),然后再从转运中心逐级配送到各个下级转运点。当快递到达该小区后,快递员大喊一声:“X 先生领快递啦!”虽然小区里包括X 先生在内的所有人都听到了快递员的喊声,但只有X 先生收取快递并当面打开确认,其他人确定不是叫自己则不用理会。IP 地址如图1-15 所示,即30.38.48.22,右边为物理层发送和接收数据的统计。

15.jpg

图1-15 IP 地址

      IP 地址属于网络层,主要功能在WLAN 内进行路由寻址,选择最佳路由。IP 报文格式如图1-16 所示,共32 位4 个字节,通常用十进制数来表示。IP 地址的掩码0xffffff00 表示255.255.255.0,掩码相同,则在同一子网内。IP 协议在IP 报头中记录源IP 地址和目标IP 地址,如图1-16 所示。

16.jpg

图1-16 IP 报文格式

      协议结构比较简单,重点说一下数据包的生存时间,即TTL(Time To Live),该字段表示IP 报文被路由器丢弃之前可经过的最多路由总数。TTL 初始值由源主机设置后,数据包在传输过程中每经过一个路由器TTL 值则减1,当该字段为0 时,数据包被丢弃,并发送ICMP 报文通知源主机,以防止源主机无休止地发送报文。这里扩展说一下ICMP(Internet Control Message Protocol),它是检测传输网络是否通畅、主机是否可达、路由是否可用等网络运行状态的协议。ICMP 虽然并不传输用户数据,但是对评估网络健康状态非常重要,经常使用的ping、tracert 命令就是基于ICMP 检测网络状态的有力工具。图1-16中TTL 右侧是挂载协议标识,表示IP 数据包里放置的子数据包协议类型,如6代表TCP、17 代表UDP 等。

      IP 报文在互联网上传输时,可能要经历多个物理网络,才能从源主机到达目标主机。比如在手机上给某个PC 端的朋友发送一个信息,经过无线网的IEEE 802.1x认证,转到光纤通信上,然后进入内部企业网802.3,并最终到达目标PC。由于不同硬件的物理特性不同,对数据帧的最大长度都有不同的限制,这个最大长度被称为最大传输单元,即MTU(Maximum Transmission Unit)。那么在不同的物理网之间就可能需要对IP 报文进行分片,这个工作通常由路由器负责完成。

      IP 是TCP/IP 的基石,几乎所有其他协议都建立在IP 所提供的服务基础上进行传输,其中包括在实际应用中用于传输稳定有序数据的TCP。




相关文章
|
15天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
2月前
|
NoSQL Java 关系型数据库
凭借Java开发进阶面试秘籍(核心版)逆流而上
最近参加了面试或者身边有朋友在面试的兄弟有没有发现,现在的面试不仅会问八股文,还会考察框架、项目实战、算法数据结构等等,需要准备的越来越多。 其实面试的时候,并不是要求你所有的知识点都会,而是关键的问题答到点子上!这份《Java 开发进阶面试秘籍(核心版)》由 P8 面试官整体把控,目前已经更新了 30 万字! 资料中涵盖了一线大厂、中小厂面试真题,毕竟真题都是技术领域最经典的基础知识和经验沉淀的汇总,非常有必要学习掌握!双重 buff 叠加,offer 接到手软~ 点击此处取,这可能是你到目前为止领取的最具含金量的一份资料! 整套资料涵盖:Spring、Spring
|
1月前
JavaWeb 开发之 ServletContext 的和使用
JavaWeb 开发之 ServletContext 的和使用
21 1
|
1天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
1天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
27 10
|
1天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
8天前
|
运维 NoSQL 算法
Java开发-深入理解Redis Cluster的工作原理
综上所述,Redis Cluster通过数据分片、节点发现、主从复制、数据迁移、故障检测和客户端路由等机制,实现了一个分布式的、高可用的Redis解决方案。它允许数据分布在多个节点上,提供了自动故障转移和读写分离的功能,适用于需要大规模、高性能、高可用性的应用场景。
15 0
|
10天前
|
人工智能 小程序 Java
JAVA开发智慧学校系统源码+人脸电子班牌布局
智慧校园是通过利用物联网,大数据技术来改变师生和校园资源相互交互的方式,以便提高交互的明确性、灵活性和响应速度,从而实现智慧化服务和管理的校园模式。
|
16天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
16天前
|
前端开发 Java API
构建RESTful API:Java中的RESTful服务开发
【4月更文挑战第3天】本文介绍了在Java环境中构建RESTful API的重要性及方法。遵循REST原则,利用HTTP方法处理资源,实现CRUD操作。在Java中,常用框架如Spring MVC简化了RESTful服务开发,包括定义资源、设计表示层、实现CRUD、考虑安全性、文档和测试。通过Spring MVC示例展示了创建RESTful服务的步骤,强调了其在现代Web服务开发中的关键角色,有助于提升互操作性和用户体验。
构建RESTful API:Java中的RESTful服务开发