网络编程(上)

基本概念

  • IP:网络中节点(电脑等)的地址,由外网找到内网。【下由详细介绍】
  • B/S,C/S:Browser/Server(浏览器/服务器)结构,Client/Server(客户机/服务器)结构。
  • TCP,UDP:传输控制协议(TCP),用户数据报协议(UDP)【局域网】。
  • 端口:数据传输到一个节点,例如电脑,数据根据端口来找到要用的程序。
  • 网络:将不同区域的电脑连接在一起,组成局域网,城域网或广域网。
  • 通信协议:计算机网络中实现通信必须有一些约定即通信协议,对速率,传输代码,传输结构,传输控制步骤,出错控制等指定标准。
  • 通信接口:为了使两个节点能进行对话,必须在它们之间建立通信工具(接口),使彼此之间能进行信息交换。接口包括两个部分:1.硬件装置:实现节点之间的信息传递。2.软件装置:规定双方通信的约定协议。

网络分层

进行数据传输是很复杂的事情,所以进行了分层,每层至于自己下一层交流,简化数据传输,对每一层约定协议。下面的图中OSI网络通信协议模型,是一个参考模型,而TCP/IP协议是事实上的标准。
Transfer ContronIn Protocil/Internet Protocol,TCP/IP

数据封装和拆封

数据封装

由于用户传输的数据一般都比较大,有的可达到MB字节,一次性发出去十分困难,于是就需要把数据分成许多片段,在按照一定的顺序发送出去。这个过程就需要对数据进行封装。

  • 应用层:准备数据。
  • 传输层:接受应用层数据加上TCP的控制信息(称为TCP头部),这个数据单元称为段(Segment),加入控制信息的过程称为封装。由此将段交给网络层。
  • 网络层:接收到段,再加上IP头部,这个数据单元称为包(Packet)。然后将包交给数据链路层。
  • 数据链路层:将包再加上MAC头部和尾部,这个数据单元称为帧(Frame)。然后将帧交给物理层。
  • 物理层:将接收到的数据转化为物理层,然后在网线中传递。

发送方数据处理的方式是从高层到底层,逐层进行数据封装

数据拆封

Data dismantling是指将接收到的数据进行拆包,每一层只把对该层有意义的数据拿走,或者说每一层只能处理发送方同等层的数据,然后把其余的部分传递给上一层,这就是对等层通信的概念。

  • 物理层:接收到比特流,经过处理后将数据交给数据链路层。
  • 数据链路层:将接收到的数据转化为数据帧,再出去MAC头部和尾部,这个出去控制信息的过程称为解封,然后将包交给网络层。
  • 网络层:接收到包,再除去IP头部,然后将段交给传输层。
  • 传输层:接收到段,再除去TCP头部,然后将数据交给应用层。
  • 应用层:梳理数据。

接受方数据处理的方式是从底层到高层,逐层进行数据解封装

常用类操作

IP地址(定位节点)

用来表示网络中一个通信实体的标志。通信实体可以是计算机,路由器等。路由器是连接两个或多个网络的网络设备。

IP地址分类:

  • IPv4:32位地址,以点分十进制表示,如192.168.0.1
  • IPv6:128位(16个字节)写成8个16位的无符号整数,每个整数用四个16进制位表示,数之间用冒号分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984

特殊的IP:

  • 127.0.0.1:本机地址
  • 192.168.0.0----192.168.255.255:私有地址,属于非注册地址,专门位组织内部机构使用。

获取一个节点的对象(InetAddress)

		//使用getLocalHost()获得本机InetAddress对象
		InetAddress ia = InetAddress.getLocalHost();
		System.out.println(ia.getHostAddress());//返回IP地址
		System.out.println(ia.getHostName());//返回计算机名
		
		//根据   域名/IP 得到InetAddress对象
		ia = InetAddress.getByName("www.baidu.com");//DNS可以将 域名和IP互相转换
		System.out.println(ia.getHostName());//返回计算机名
		ia = InetAddress.getByName(ia.getHostAddress());
		System.out.println(ia.getHostAddress());//返回IP地址

端口(定位软件)

端口是虚拟概念,并不是说主机上真有若干个端口。通过端口,可以在一个主机上运行多个网络程序。端口的表示是一个16位的二进制整数,对应十进制的0到65535.

网络程序都有自己的端口。

TCP 和 UDP 都有 65535 个端口,同一个协议端口不能冲突。

  • 公认端口 0 - 1023 :比如80端口分配给www,21端口分配给FTP,8080–>tomcat , 1521 -->oracle,3306 --> MySQL。
  • 注册端口 1024 - 49151 :分配给用户进程或应用程序。
  • 动态 / 私有端口 49152 - 65535

cmd命令:

  • 查看所有端口:netstat -ano
  • 查看指定端口:netstat -ano |findstr “808”
  • 查看指定进程:tasklist | findstr “808”
  • 查看具体程序:使用任务管理器查看PID.

包含端口的IP对象(InetSocketAddress)

		//包含端口
		 InetSocketAddress ias = new InetSocketAddress("localhost",8080);
		 System.out.println(ias.getPort());

URL(定位资源)

统一资源定位符。其结构包括

  • 协议
  • 存放资源的主机域名
  • 端口号(默认80)
  • 资源文件名
  • (参数,锚点)

URL类

		URL url = new URL("http://www.baidu.com:80/index.html");
		//获取四个值
		System.out.println(url.getProtocol());
		System.out.println(url.getHost());
		System.out.println(url.getPort());
		System.out.println(url.getPath());
		System.out.println(url.getFile());
		System.out.println(url.getQuery());//参数
		System.out.println(url.getRef());//锚点

传输协议

网络数据传输需要按照协议,分为TCP 和 UDP。
传输协议是传输层的,传输层要与应用层进行数据交流,使用套接字Socket。

TCP

transfer control protocol
一种面向连接(连接导向)的,可靠的,基于字节流的运输层通信协议

特点:

  • 面向连接
  • 点到点的通信
  • 高可靠性,安全
  • 占用系统资源多,效率低

三次握手(点名,答到,确认)

UDP

user datagram protocol
一种无连接的传输层协议,提供面向事务的简单不可靠信息传递业务。

特点

  • 非面向连接,传输不可靠,可能丢失
  • 发送不管对方是否准备好,接受方收到也不确认
  • 可以广播发送
  • 非常简单的协议,开销小
  • 又被拦截的风险
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值