计算机网络实现不同计算机之间的通信,必须依靠编写网络程序来实现
作用: 资源共享、信息传递
组成:
-
计算机硬件:计算机、外部设备、通信线路
-
计算机软件:网络操作系统(linux\windows…)、网络管理软件、网络通信协议
计算机之间要可以实现连接和通信,计算机网络就要遵循一定的通信协议,于是就出现了OSI参考模型,之后似乎TCP\IP网络通信协议
TCP\IP有四层
TCP/IP | 数据封装 |
---|---|
应用层 | 传输数据给传输层 |
传输层 | 给数据添加TCP头部(segment) |
网络层 | 加上IP头部 段(segent)–> 包(Pocket) |
数据链路+物理 | 数据链路层打上MAC头部和尾部,(Frame),交给物理层,将数据转化为比特流 |
TCP/IP | 数据解封装 |
---|---|
数据链路+物理 | 物理层处理二进制比特流,交给数据链路层,链路层将数据转化为Frame,去除MAC头部和尾部,转化为Pocket |
网络层 | 去除IP头部,变成Segment |
传输层 | 去除TCP头部,将数据交给应用层 |
应用层 | 得到数据 |
IP
定位
IP定位计算机,Port定位软件,URL定位网络上和软件上的每一份资源。
域名和IP之间有DNS(域名解析), 实现数字的IP地址和有意义的字符串进行转换
端口
端口用来区分计算机上的不同程序,16位二进制,2个字节,同一个协议端口不能冲突(tcp udp)
- 查看所有端口:netstat -ano
- 查看指定端口:netstat -ano | findstr “808”
- 查看指定进程:tasklist | findstr “808”
- 任务管理器查看PID
InetSocketAddress: 该类实现IP+端口号,包含IP和端口信息,常用于socket通信
URL
统一资源定位符
在www上,每个信息资源都有统一且唯一的地址,即统一资源定位符Uniform Resource Locator.
如http://www.google.com:80/index.html
由四部分组成:
-
协议
-
存放资源额主机域名
-
端口号
-
资源文件名
HTTP有默认端口80
互联网三大基石:HTML HTTP URL
以
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
为例(https://www.baidu.com/s?ie=UTF-8&wd=URL参数)
上面 URL 包括以下几部分:
协议部分:该 URL 的协议为"http:"。在 internet 中可以有多种协议,比如:HTTP HTTPS FTP等。
域名部分:该 URL 的域名部分为"www.aspxfans.com"。一个 URL 中,也可以使用IP地址作为域名(域名和IP地址是可以相互转换的)。
端口部分:跟在域名后面的是端口,域名和端口之间使用":"分割开。端口不是 URL 必须的部分,如果省略端口,则将采用默认端口。http 协议的默认端口是 80,https 协议的默认端口是 443。
从域名(或域名+端口)后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”。
文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名。
参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
- 在使用url进行参数传递时,经常会传递一些中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误。这些特殊符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如空格的编码值是"%20"。下表中列出了一些URL特殊符号及编码。
链接:https://www.jianshu.com/p/6562e0b0e016
爬虫原理
- 获取URL
- 下载资源
- 分析
- 。。。
协议(TCP,UDP)
-
TCP(transfer control protocol):一种面向连接(连接导向)的、可靠地、基于字节流的运输层通信协议。
特定:面向连接、点到点、高可靠性、占用系统资源多效率队
(打电话)
-
UDP(User Datagram Protocol ): 一种无连接的传输层协议,面向事务的简单不可靠信息传送服务
(寄包裹)
特定:非面向连接,传输不可靠,可能丢失,发送不管对方是否准备好,接收方也不确认,可以广播发送、非常简单的协议,开销小
**套接字socket **
应用层如何使用传输层服务?应用层和传输层之间使用套接字来进行分离
UDP编程
大小不要超过60k,数据不能太大,太大分段
会存在丢包
分析:
- 使用基于UDP协议的Socket网络编程实现
- 不需要理由IO流实现数据的传输(使用字节流)
- 每个数据发送单元被统一封装成数据包的方式,发送方将数据包发送到网络中,数据包在网络中寻找他的目的地
DatagramSocket | 用于发送或接收数据包的套接字 |
---|---|
DatagramPacket | 数据包,实现无连接分组传输服务。仅基于该数据包中包含的信息,每个消息从从一台机器路由到另一台,中间的多个分组可能可能有不同的路由,到达顺序不一样 |
(socket可接受和发送数据包)
模拟传输
接受方:
-
使用DatagramSocket 指定端口,创建接收端
-
准备容器 封装成DatagramPackets包裹
-
阻塞式接受包裹receive(DatagramPacket p)
-
分析数据
byte[] getData()
int getLength()
-
释放资源
发送端
- 使用DatagramSocket 指定端口,创建发送端
- 准备数据,转化成字节数组
- 封装成DatagramPacket,需指定目的地
- 发送包裹send(DatagramPacket p)
- 释放资源
端口自己的理解:计算机之间要进行通信,互相发送信息,计算机提供各种不同的服务,需要各种不同的数据,IP定位计算机位置,端口定位计算机的服务。对于发送也是如此,不同的端口定义不同的服务。一个公司(ip),有不同的部门(端口)
同一个协议下端口不能冲突
发送端要有发送端口,包的信息有目的地的IP和接受端口
接收端指定接受端口,与发送端包中的接收端口一致