热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Java】从Java代码到网络编程,三次握手又该如何理解

💁个人主页:黄小黄的博客主页❤️支持我:👍点赞🌷收藏🤘关注🎏格言

💁 个人主页:黄小黄的博客主页
❤️ 支持我:👍 点赞 🌷 收藏 🤘关注
🎏 格言:All miracles start from sometime somewhere, make it right now.
本文来自专栏:JavaSE从入门到精通
在这里插入图片描述



文章目录

  • 1 网络编程的相关概念
    • 1.1 网络、网络通信与IP地址
    • 1.2 IPv4与IPv6
    • 1.3 域名和端口号
  • 2 网络协议
    • 2.1 网络通信协议
    • 2.2 TCP和UDP
    • 2.3 三次握手
  • 写在最后




1 网络编程的相关概念


1.1 网络、网络通信与IP地址

1️⃣ 网络通信


  1. 网络通信指的是两台设备之间通过网络实现数据传输,即,将数据通过网络从一台设备传输到另一台设备;
  2. java.net 包下提供了一系列的接口和类,供程序员使用,用于完成网络通信。

在这里插入图片描述

2️⃣ 网络

什么是网络?
两台或者多台设备通过一定的物理设备连接起来构成了网络。 根据网络覆盖的范围大小不同,网络有如下分类:


  1. 局域网:覆盖范围最小,仅仅覆盖一个卧室一个机房等;
  2. 城域网:覆盖范围较大,可以覆盖一个城市;
  3. 广域网:覆盖范围最大,可以覆盖全国,甚至全球。代表就是万维网。

3️⃣ IP地址


  1. 概念:ip地址是用于唯一标识网络中的每台计算机/主机的序列;
  2. 查看ip地址:ipconfig
  3. ip地址的表示:xx.xx.xx.xx 每个xx的范围(0-255);
  4. ip地址的组成:网络地址+主机地址,例如:192.167.25.68;

1.2 IPv4与IPv6

什么是IPv6?
答:IPv6是互联网工程任务组设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编上一个地址。由于IPv4最大的问题在于网络地址资源有限,严重限制了互联网的应用和发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连接互联网的障碍。

IPv4与IPv6的区别
答:对于IPv4,ip地址是由4个字节表示的,每个字节8位,1个字节的范围为0-255(0到2的8次方-1);而IPv6则使用128位表示地址,占16字节,是IPv4地址的四倍!

🐱 IPv4地址的分类:
在这里插入图片描述


  • A 类地址: (0.0.0.0~127.255.255.255)
    A 类地址第 1 字节为网络地址,其它 3 字节为主机地址。
    A 类地址范围:1.0.0.1 ~ 126.255.255.254。
    A 类地址中的私有地址:10.X.X.X(10.0.0.0 ~ 10.255.255.255)。
    A 类地址中的保留地址:127.X.X.X,用作循环测试用的。
  • B 类地址: (128.0.0.0~191.255.255.255)
    B 类地址第 1,2 字节为网络地址,其它 2 字节为主机地址。
    B 类地址范围:128.0.0.1 ~ 191.255.255.254。
    B 类地址中的私有地址:172.16.0.0 ~ 172.31.255.255。
    B 类地址中的保留地址:169.254.X.X
  • C 类地址: (192.0.0.0~223.255.255.255)
    C 类地址第 1,2,3 字节为网络地址,其它 1 字节为主机地址。
    C 类地址范围:192.0.0.1 ~ 223.255.255.254。
    C 类地址中的私有地址:192.168.X.X。
  • D 类地址: (224.0.0.0~239.255.255.255)
    D 类地址不分网络地址和主机地址。
    D 类地址范围:224.0.0.1 ~ 239.255.255.254。
  • E 类地址: (240.0.0.0~247.255.255.255)
    E 类地址不分网络地址和主机地址。
    E 类地址范围:240.0.0.1 ~ 255.255.254
    ————————————————
    IPv4地址分类参考:IPV4地址划分

特别地,127.0.0.1 表示本机地址


1.3 域名和端口号

🐱 域名:

域名相对来说比较好记,将ip地址映射成了域名。例如:www.baidu.com。而这一映射关系则与HTTP协议有关,这里不再赘述,后续将会开始计算机网络专栏,供大家学习。

🐟 端口号:

端口号用于标识计算机某个特定的网络程序, 以整数的形式表示,范围:0~65535(两个字节表示端口)。其中,0 ~ 1024已经被占用了,例如:ssh 22、ftp 21、smtp 25、http 80。
常见的网络程序端口号:


  • tomcat:8080
  • mysql:3306
  • oracle:1521
  • sqlserver:1433

如何理解域名和端口

答:看示意图,百度主机的IP地址为:110.242.68.3,用户想要访问主机,则需要直到百度主机的IP地址,但是对于用户而言,这不容易记忆,于是,IP地址映射成了域名:www.baidu.com,用户可以通过域名来访问该主机。
可是,主机访问上了,而主机提供了多种服务,且其并不知道用户需要做什么。于是,有了端口号,根据不同的端口,可以标识不同的用户需要哪种服务。例如:IP + 端口25,则访问的是百度主机的邮件服务。
在这里插入图片描述




2 网络协议


2.1 网络通信协议

协议(Tcp/Ip)

TCP/IP是(Transmission Control Protocol/Internet Protocol)的简写,中文译名:传输控制协议/因特网互联协议,又叫网络通讯协议。 这个协议是Internet最基本的协议,Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的,数据进入协议栈时的封装过程示意图如下:
在这里插入图片描述
拿到用户数据后,首先经过应用层,增加Appl首部,知道是由哪个应用传输出来的。而后,经过传输层,进行TCP、IP首部的添加,最后经过以太网驱动后会将数据封装为一串序列。当需要查看该用户数据的时候,则相当于要逆向拆封,最终解释成用户数据。当然TCP/IP协议肯定没有这么简单,如果有需求,可以去查看TCP相关的书籍。

那么,网络协议该如何理解呢?
其实,协议就是数据在网络编程中的一种组织形式, 接收和回复数据都需要按照规定好的协议方式进行。
比如,人和人的交流:两个人见面打招呼,互相说“你好!”这样的行为,就是依靠语言完成的,我们可以简单理解为:语言其实本身也是一种协议,只有相同的语言,我们才能进行正常的交流。试想一下,我国的方言交流,和普通话与方言交流的场景… …
在这里插入图片描述


2.2 TCP和UDP

TCP协议:传输控制协议


  1. 使用TCP协议前,需要先建立TCP连接,形成传输数据通道;
  2. 传输前,采用“三次握手”方式,是可靠的;
  3. TCP协议进行通信的两个应用进程:客户端、服务端;
  4. 在连接中可以进行 大数据量的传输;
  5. 传输完毕,需要释放已建立的连接,效率低。

UDP协议:用户数据协议


  1. 将数据、源、目的封装成数据包,不需要建立连接;
  2. 每个数据包的大小限制在64K内,不适合传输大量数据;
  3. 无需连接,所有是 不可靠的;
  4. 发送数据结束时无需释放资源,速度快;

🐰TCP与UDP的区别是什么?

答:TCP 数据传输就是两个人隔空对话,差了一点距离,所以需要对方反复确认听见了自己的话。可以理解成,TCP就像生活中的打电话,需要确认对方是否在听后,才能进行接下来的对话。而UDP更像是发短信,完全不需要确认对方是否阅读,是否把你拉黑,只需要管好自己是否成功发送短信。


2.3 三次握手

TCP三次握手如何理解?

答:TCP 三次握手就好比两个人在街上隔着50米看见了对方,但是因为雾霾等原因不能100%确认,所以要通过招手的方式相互确定对方是否认识自己。
在这里插入图片描述张三首先向李四招手(syn),李四看到张三向自己招手后,向对方点了点头挤出了一个微笑(ack)。张三看到李四微笑后确认了李四成功辨认出了自己(进入estalished状态)。

但是李四还有点狐疑,向四周看了一看,有没有可能张三是在看别人呢,他也需要确认一下。

所以李四也向张三招了招手(syn),张三看到李四向自己招手后知道对方是在寻求自己的确认,于是也点了点头挤出了微笑(ack),李四看到对方的微笑后确认了张三就是在向自己打招呼(进入established状态)。

于是两人加快步伐,走到了一起,相互拥抱。
在这里插入图片描述
张三喊了一句话(data),李四听见了之后要向张三回复自己听见了(ack)。
如果张三喊了一句,半天没听到李四回复,张三就认为自己的话被大风吹走了,李四没听见,所以需要重新喊话,这就是tcp重传。

也有可能是李四听到了张三的话,但是李四向张三的回复被大风吹走了,以至于张三没听见李四的回复。

张三并不能判断究竟是自己的话被大风吹走了还是李四的回复被大风吹走了,张三也不用管,重传一下就是。

既然会重传,李四就有可能同一句话听见了两次,这就是「去重」。「重传」和「去重」工作操作系统的网络内核模块都已经帮我们处理好了,用户层是不用关心的。

三次握手参考文章及动图出处:跟着动画学习 TCP 三次握手和四次挥手




写在最后

🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ❤️ ❤️ ❤️ !
如果有问题,欢迎私信或者评论区!
在这里插入图片描述

共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”
在这里插入图片描述


推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • c# java socketn 字节流_C#Socket编程详解(一)TCP与UDP简介
    一、TCP与UDP(转载)1、TCP1.1定义TCP(TransmissionControlProtocol)传输控制协议。是一种可靠的、面向连接的协议(eg:打电话)、传输效率低 ... [详细]
  • 三小时掌握计算机网络基础(通俗易懂)
    目录1.网络层次划分2.OSI七层网络模型3.IP地址4.子网掩码及网络划分5.ARPRARP协议6.路由选择协议7.TCPIP协议8.UDP协议 9.DNS协议 ... [详细]
  • OSI七层模型、TCP/IP五层模型
    OSI网络互连的七层框架:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;应用层OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,为用户直接提供各种网 ... [详细]
  • 2016年8月29日当初想的太简单~~~哎写在前面从3月份开始各大互联网类、游戏类、软件类等公司开始招暑期实习,9月份正式招聘,面临众多的工作选择和技术方向,我们不免有些眼花缭乱啊 ... [详细]
  • 适合小型网络环境的免费网络管理软件Intermapper
    InterMapper网络管理软件可支持监测5台以内的网络设备,特别适合安装使用在小型网络环境,可以实时了解网络运行状态和网络拓扑,支持多 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 实例详解ISA防火墙策略元素
    我们在前面的工作中已经实现了ISA2006的代理服务器功能,接下来我们要实现ISA的访问控制功能。很多公司都有控制员工访问外网的需求,例如有的公司不允许 ... [详细]
  • ! Configuration File for keepalivedglobal_defs {   notification_email {     ... [详细]
  • TCP/IP详解 卷1 第一章概述
    第一章概述1.2分层网络编程通常分不同层次进行开发,每一层负责不同的通信功能。一个协议族比如TCPIP,通常是一组不同层次上多个协议的组合。一般可以认为 ... [详细]
  • 软测管理工具实践04
    一.今日任务——安装完成QC9.0进过几天的安装,终于把QC9.0成功的安装在了自己win7系统的电脑上。其中遇到的困难很多,首先是QC的版本问题&#x ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • HTTP协议相关的网络经典五层模型
    网络通信相关概念的讲解–网络协议分层(经典五层模型)在我们了解HTTP相关内容之前我们先来了解一下“网络协议分层”相关内容,因为这个是我们了解HTTP相关内容的前提条件;大家有一 ... [详细]
  • IP双栈环境下网络应用迁移
    IPv4向IPv6迁移有多种途径,在选择具体的迁移方式时,当前环境中运行的应用是否支持IPv6是重要的考量因素之一,同时在编写新的应用时,需要考虑新编写的应用不仅可以适应当前主流的IPv4环境, ... [详细]
author-avatar
小小寒沙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有