码出高效: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。




相关文章
|
11天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
33 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
9天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
23 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
|
10天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的蛋糕商城管理系统
基于Java+Springboot+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的蛋糕商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
21 3
基于Java+Springboot+Vue开发的蛋糕商城管理系统
|
10天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的美容预约管理系统
基于Java+Springboot+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的美容预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
21 3
基于Java+Springboot+Vue开发的美容预约管理系统
|
11天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的房产销售管理系统
基于Java+Springboot+Vue开发的房产销售管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的房产销售管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
25 3
基于Java+Springboot+Vue开发的房产销售管理系统
|
12天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的反诈视频宣传系统
基于Java+Springboot+Vue开发的反诈视频宣传系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的反诈视频宣传管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
41 4
基于Java+Springboot+Vue开发的反诈视频宣传系统
|
13天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的健身房管理系统
基于Java+Springboot+Vue开发的健身房管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的健身房管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
42 5
基于Java+Springboot+Vue开发的健身房管理系统
|
10天前
|
存储 网络协议 Java
Java NIO 开发
本文介绍了Java NIO(New IO)及其主要组件,包括Channel、Buffer和Selector,并对比了NIO与传统IO的优势。文章详细讲解了FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel及Pipe.SinkChannel和Pipe.SourceChannel等Channel实现类,并提供了示例代码。通过这些示例,读者可以了解如何使用不同类型的通道进行数据读写操作。
Java NIO 开发
|
12天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的医院门诊预约挂号系统
基于Java+Springboot+Vue开发的医院门诊预约挂号系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的门诊预约挂号管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
33 2
基于Java+Springboot+Vue开发的医院门诊预约挂号系统
|
13天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的家具管理系统
基于Java+Springboot+Vue开发的家具管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的家具管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
32 2
基于Java+Springboot+Vue开发的家具管理系统
下一篇
无影云桌面