网络编程学习笔记(基础)

序言:这个博客有点“胡吃海喝”的味道,所写虚于所实哈!笔记记的是一个B站up主的。

目录

TCP(双向的沟通,“双向奔赴”->稳定)

UDP(单向的沟通,“单相思”->发送)

网络编程的作用:

网络编程的重点在于:联机(单机游戏和联机游戏的区分😀)

网络协议的意义:兼容通信

常用协议

TCP/IP协议

NetBEUI

IPX/SPX协议

层次划分

网络编程 main 问题:

IP地址和端口号:

IP地址:在网络中把某个设备进行唯一定位的网络通信地址(互斥性)

分类和扩展:

端口号:表示主机(比如计算机)上的一个程序的进程(也具有互斥性)

分类:

网络通信协议:协约

“三次握手,四次挥手”

URL:统一资源定位符


网络的联系类似写信或者寄包裹,而一封信一般会有以下几个基本信息:

        1.对方的称呼(这个是基本的)

        2.对方的地址

        3.自己的地址

先附上百度百科关于计算机网络的概述:

        计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路和通信设备连接起来,在网络操作系统网络管理软件网络通信协议的管理和协调下,实现资源共享信息传递计算机系统。 [1]

TCP(双向的沟通,“双向奔赴”->稳定)

        TCP 就像打电话,像是在A和B之间构建了一座稳定的沟通桥梁,而这个桥梁的意义在于确保沟通的落实性(即代表A和B确确实实在沟通,而不是B是植物人,A在单方面的倾述。在TCP联系的过程中,A和B他们可以选择不时的回应或者当个听众都行),而A和B都可以选择接听/挂断 xxx 的电话。

UDP(单向的沟通,“单相思”->发送)

        UDP 就像发传单,比起TCP更侧重于发送而不是沟通、联系。由此可见UDP的“沟通”比较不稳定。
 

网络编程的作用:

        如果你是程序员,你就可以通过网络编程来分享编程产品/提供有关服务;如果你是网民,你可以通过网络编程来享受编程产品或有关服务。

网络编程的重点在于:联机(单机游戏和联机游戏的区分😀)

引用一下百度百科的概述:

        网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。

概念寥寥几笔就盖过了其具体的实现,实际上还有许多繁琐的事情要做,这里我们就“飞”过去。

网络协议的意义:兼容通信

        可以看到我把协议二字加红了,这个“协议”是代表什么意思呢?大家在看这篇文章时也许用的设备是不同的:比如手机、电脑或者安卓(Android)和苹果(IOS)等等。

        它们来自不同的厂家,这些设备用的系统是不一样的,通行的语言也不同(字符集),但我们需要“存异求同”的去通信怎么办呢!

        这就需要统一的规矩来指导了!这就像一个国际法,它兼容了世界上所有的法律!

接下来引用一下百度百科的词条:

网络协议是由三个要素组成:

        (1) 语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。

        (2) 语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。

        (3) 时序。时序是对事件发生顺序的详细说明。(也可称为“同步”)。

人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。

为了全世界的计算机网络的使用,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。

而由于网络节点之间联系的复杂性,在制定协议时,通常把复杂成分分解成一些简单成分,然后再将它们复合起来。最常用的复合技术就是层次方式网络协议的层次结构如下:

(1)结构中的每一层都规定有明确的服务及接口标准。

(2)把用户的应用程序作为最高层

(3)除了最高层外,中间的每一层都向上一层提供服务,同时又是下一层的用户。

(4)把物理通信线路作为最低层,它使用从最高层传送来的参数,是提供服务的基础。

常用协议

TCP/IP协议

TCP/IP(Transport(运输) Control(控制) Protocol/Internet Protocol,传输控制协议/Internet协议)的历史应当追溯到Internet的前身—ARPAnet时代。为了实现不同网络之间的互连,美国国防部于1977年到1979年间制定了TCP/IP体系结构和协议。TCP/IP是由一组具有专业用途的多个子协议组合而成的,这些子协议包括TCP、IP、UDP、ARP、ICMP等。TCP/IP凭借其实现成本低、在多平台间通信安全可靠以及可路由性等优势迅速发展,并成为Internet中的标准协议。在上世纪90年代,TCP/IP已经成为局域网中的首选协议,在最新的操作系统(如Windows7、Windows XP、Windows Server2003等)中已经将TCP/IP作为其默认安装的通信协议。

NetBEUI

即NetBios Enhanced(提高) User(用户) Interface ,或NetBios增强用户接口。它是NetBIOS协议的增强版本,曾被许多操作系统采用,例如Windows for Workgroup、Win 9x系列、Windows NT等。NETBEUI协议在许多情形下很有用,是WINDOWS98之前的操作系统的缺省协议。NetBEUI协议是一种短小精悍、通信效率高的广播型协议,安装后不需要进行设置,特别适合于在“网络邻居”传送数据。所以建议除了TCP/IP协议之外,小型局域网的计算机也可以安上NetBEUI协议。另外还有一点要注意,如果一台只装了TCP/IP协议的WINDOWS98机器要想加入到WINNT域,也必须安装NetBEUI协议。

IPX/SPX协议

本来就是Novell开发的专用于NetWare网络中的协议,但是也非常常用--大部分可以联机的游戏都支持IPX/SPX协议,比如星际争霸,反恐精英等等。虽然这些游戏通过TCP/IP协议也能联机,但显然还是通过IPX/SPX协议更省事,因为根本不需要任何设置。除此之外,IPX/SPX协议在非局域网络中的用途似乎并不是很大。如果确定不在局域网中联机玩游戏,那么这个协议可有可无。

层次划分

物理层以太网 · 调制解调器 · 电力线通信(PLC) · SONET/SDH · G.709 · 光导纤维 · 同轴电缆 · 双绞线等

以下四层也可统称:TCP/IP四层模型,而OSI七层网络模型只是理论的、理想的,最终落在实际变成了 物理层和TCP/IP四层 网络模型。

数据链路层:Wi-Fi(IEEE 802.11) · WiMAX(IEEE 802.16) ·ATM · DTM · 令牌环 · 以太网 ·FDDI · 帧中继 · GPRS · EVDO ·HSPA · HDLC · PPP · L2TP ·PPTP · ISDN·STP · CSMA/CD等

网络层协议:IP (IPv4 · IPv6) · ICMP· ICMPv6·IGMP ·IS-IS · IPsec · ARP · RARP · RIP(撕烂)等

传输层协议:TCP · UDP · TLS · DCCP · SCTP · RSVP · OSPF 等(重点关注)

应用层协议:DHCP ·DNS · FTP · Gopher · HTTP· IMAP4 · IRC · NNTP · XMPP ·POP3 · SIP(SIP协议) · SMTP ·SNMP · SSH ·TELNET · RPC · RTCP · RTP ·RTSP· SDP · SOAP · GTP · STUN(打晕) · NTP· SSDP · BGP 等

网络编程 main 问题:

        1.如何准确定位网络中的设备/主机

        2.定位之后如何进行通信

IP地址和端口号:

        呀哈!不小心涉及了大名鼎鼎的IP地址,可端口号是什么呢?它就像身份证上的某某街道的几号小组,是个具体联系记号。以下是举例:

192.168.16.155:14657        冒号前面的代表IP地址,其后的代表端口号

提一嘴C/S(客户端应用 开发)和(游览器应用 开发)B/S引用一下别人说的:

        1、客户端服务端交互不同。BS一定是请求-响应式,客户端发送请求,服务端完成业务逻辑,返回响应结果;CS则不一定是这种模式,可以是服务端自发受到事件、外部消息触发业务逻辑处理,后将结果推送到客户端。
        2、业务逻辑处理分布不同。BS的业务逻辑绝大部分都在服务端,客户端只负责收集数据和显示,是瘦客户端;CS允许客户端有一定的业务逻辑处理,能够更快速的响应用户的一些操作。

  • IP address and port number

IP地址:在网络中把某个设备进行唯一定位的网络通信地址(互斥性)

        127.0.0.1        在网络通信中代表“我”,即本机网络地址,因此在无网络状态也能 ping 自己。

        1. 子网掩码:它用于将一个IP地址划分为网络地址和主机地址,帮助我们确定网络中的主机数量。
        2. 网关:它是连接不同网络之间的设备,用于实现数据包的转发和路由选择。
        3. DNS(域名系统):它将域名转换为IP地址,使我们能够通过易于记忆的域名访问网站。
        4. 端口转发:它可以帮助我们在路由器上将外部请求转发到特定的内部IP地址和端口上,实现远程访问和服务的搭建。

分类和扩展:

        1.ipv4(四:组十进制) / ipv6(八:组十六进制)        它们每组都是4位(bit)

        2.公网(互联网) - 私网(局域网)

        3.ABC、DE类地址(ipv4)

引用一幅网图和一个网址

0.0.0.0和255.255.255.255这两个IP地址到底有啥用? - 知乎最近在自学一些计算机网络的知识,在DHCP里面经常看见这两个IP地址,但是就是不知道这两个IP地址到底能干…https://www.zhihu.com/question/267097519

java和IP地址

​

public class Test_InetAddress {
    public static void main(String[] args) {
        try {
            //本机环地址
            InetAddress ipAddress = InetAddress.getByName("127.0.0.1"); 
                                                  //直接写 ipv4 地址
            InetAddress ipAddress2 = InetAddress.getByName("localhost"); 
                                                 //localhost 代表本机地址
            InetAddress ipAddress3 = InetAddress.getLocalHost(); 
                                                //方法名已说明
            System.out.println(ipAddress);
            System.out.println(ipAddress2);
            System.out.println(ipAddress3);
            System.out.println();

            //网址的 ip 地址
            InetAddress ipAddress4 = InetAddress.getByName("www.baidu.com");
            System.out.println(ipAddress4);
            System.out.println(ipAddress4.getAddress()); 
                                          //字节样式的IP地址
            System.out.println(ipAddress4.getCanonicalHostName()); 
                                          //规范的主机名
            System.out.println(ipAddress4.getHostAddress()); 
                                          //IP地址
            System.out.println(ipAddress4.getHostName()); 
                                         //主机名
        }catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

[点击并拖拽以移动]
​

端口号:表示主机(比如计算机)上的一个程序的进程(也具有互斥性)

       1.数量众多 0 ~ 65535(也分协议:比如TCP和UDP协议,它们各有 65535 个端口)

        2.用来区分各个程序,比如 QQ 和 微信 ,它们各有端口来使用

分类:

        1.公有端口:0 ~ 1023

                HTTP:80

                HTTPS:443

                FTP:21

                Telent:23

        2.私有端口(程序注册端口):

                1024~49151,可以分配给用户和程序,以下是一些程序的默认端口号:

                        Tomcat:8080

                        MySQL:3306

                        Oracle:1521

                动态的端口:49152 ~ 65535

以上红色的端口不建议使用,因为会造成端口号冲突!

网络通信协议:协约

老样子,继续引用一下百度百科的词条:

网络通信协议是一种网络通用语言,为连接不同操作系统和不同硬件体系结构的互联网络提供通信支持,是一种网络通用语言。

比如TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTPSMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。 [1]

“三次握手,四次挥手”

男(客户端):靓女,你对我“来电”吗?(第一次握手)

女(服务器):Yes!靓仔!(第二次握手)

男(客户端):那我们去小亭子那开始聊天吧!(第三次握手)

以下图片侵权即删,原图地址:TCP/IP三次握手、四次挥手流程_tcp三次握手和4次挥手的过程_猎人在吃肉的博客-CSDN博客

然后他们恋爱了,但是男生的得了癌症,需要许多钱治疗为了不拖累女生所以:

男(客户端 / 主动关闭方)打电话:亲爱的,我们分手吧!(第一次挥手)

女(服务器 / 被动关闭方)正处于工作的状态:好的。(第二次挥手)

女(服务器 / 被动关闭方)腾出手来:亲爱的,你确定要和我分手吗?(第三次挥手)

男(客户端 / 主动关闭方):没错。(第四次挥手)

        

以上比喻大家当笑话一看即可。

        之所以需要三次握手和四次挥手是充分考虑了资源和效率!这行动里面有许多细节就不展开了。

URL:统一资源定位符

URL 在万维网(www)上就是统一的网址

URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。

也可认为由4部分组成:协议、主机、端口、路径

URL的一般语法格式为:protocol :// hostname[:port] / path / [:parameters][?query]#fragment

其中方括号包裹的是可选项

引用词条:

WWW (World Wide Web(网络),万维网)是存储在Internet计算机中、数量巨大的文档的集合。这些文档称为页面,它是一种超文本(Hypertext)信息,可以用于描述超媒体文本图形视频音频多媒体,称为超媒体(Hypermedia)。Web(网络)上的信息是由彼此关联的文档组成的,而使其连接在一起的是超链接(Hyperlink) [2]。

Java 和 URL

public class URLDownload {
    public static void main(String[] args) throws Exception {
        URL url =
                new URL("http://...");
//              下载地址
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//                                                          连接资源
        InputStream is = urlConnection.getInputStream();
//                                      读取流
        FileOutputStream fos = new FileOutputStream("卓玛.mp3");
//                              构建文件
        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer))!=-1) {
            fos.write(buffer,0,len);
        }
//        以上进行循环写文件
        fos.close();
        is.close();
        urlConnection.disconnect();
//                    断开连接
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值