网络——OSI模型、TCP/IP 模型

了解这一部分前,先认识了两个概念:

计算机网络 是通过传输介质、通信设施和通信协议,将分散在不同点的计算机设备互联起来实现资源共享和数据传输的系统。

网络编程 就是编写程序使联网的两个或多个设备直接进行传输

一、OSI模型

国际标准组织提出网络开发互联模型OSI(open System Interconnect),将网络划分成7层。

应用层ftp\http\smtp “hello,你好”
表示层对应用层的数据进行封装,校验,加密等操作
会话层在于对通信开始、结束、异常中断进行处理
传输层保持通信双方的端对端的联系(端口)
网络层在于通信双方主机与主机的联系(IP)
数据链路层在于保证网络中相邻节点的可靠通信、物理地址(Mac地址) ->arp,rarp
物理层数据以bit流的形式在通信介质上传输

在这里插入图片描述

tips: 端口数量:65536(2^32)个端口,端口1~1024为系统端口,1025以后可以自由使用

二、TCP/IP 模型

在这里插入图片描述

各层的介绍
  • 应用层

    • 应用:各种应用程序、APP
    • 协议:FTP协议、SMTP协议、HTTP协议
      • FTP(File transfer protocol):文件传输协议<端口:21>,减少或者消除不同操作系统下处理文件的不兼容性。
      • HTTP(HyperText transfer protocol)超文本传输协议<端口:80>
      • SMTP(Simple Mail transfer protocol) 简单邮件协议<端口: 25> 用于发送邮件
  • 传输层

    • 数据单元:数据段
    • 协议:TCP、UDP
      • TCP(Transmission Control Protocol)传输控制协议,提供可靠的连接服务,进行数据传输之前需要建立连接(三次握手),建立连接后才能通信,通信结束断开连接(四次挥手)
      • UDP(User Datagram Protocol)用户数据报协议,发送数据前不需要建立连接
  • 网络层

    • 应用:路由器、交换机
    • 数据单元:数据包
    • 协议
      • IP(IPv4/IPV6)(Internet Protocol):网络互连协议
      • ARP(Address Resolution Protocol):地址解析协议,实现通过IP地址得到物理地址
      • RARP(Reverse Address Resolution Protocol):逆地址解析协议,实现通过物理地址得到IP地址
      • ICMP(Internet Control Message Protocol):网络控制报文协议,TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息
  • 数据链路层

    • 数据单元:帧
  • 物理层

    • 应用:网线
    • 数据单元:比特

在这里插入图片描述

三、C/S模型

C/S结构即Client/Server (客户机/服务器) 结构,是软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,需要安装客户端才可进行管理操作。

客户端和服务器端的程序不同,用户的程序主要在客户端,服务器端主要提供数据管理、数据共享、数据及系统维护和并发控制等,客户端程序主要完成用户的具体的业务。

**特点:**开发比较容易,操作简便,但应用程序的升级和客户端程序的维护较为困难。

四、网络基于C/S模型在TCP中的交互

一、步骤
服务端(Server)客户端(Client)
bind(端口)
connect(连接 IP+端口)
listen(监听状态)
accept(返回和客户端连接的)
read/write(读写)read/write(读写)
close(关闭资源)close(关闭资源)
二、代码展示

服务端:

public class TCPServer {
    public static void main(String[] args) throws IOException {
        //创建ServerSocket的实例
        ServerSocket serverSocket = new ServerSocket();
        //绑定端口
        serverSocket.bind(new InetSocketAddress(8888));
        //监听
        Socket socket = serverSocket.accept();
        System.out.println("服务端启动了");
        //读写
        BufferedReader reader = new BufferedReader(new InputStreamReader( socket.getInputStream()));

        String message = null;
        while ((message = reader.readLine()) != null){
            System.out.println(message);
        }

        serverSocket.close();
        socket.close();
        reader.close();

    }
}

客户端:

public class TCPClient {

    public static void main(String[] args) throws IOException {
        //创建socket实例
        Socket socket = new Socket();
        //连接服务器
        try {
            socket.connect(new InetSocketAddress("127.0.0.1",8888));

            System.out.println("客户端连接上服务器了");

            //发送消息
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("hello\n".getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            socket.close();
        }
    }
}

注意!!!客户端连接服务端时,服务端必须先启动

五、数据包封装与拆包

1、封装过程

在这里插入图片描述

2、拆包过程

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值