Advertisement

网络协议基础知识整理

阅读量:

网络部分

网络分层:
OSI:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP:网络接口层、网络层、传输层、应用层

应用层:FTP、SMTP、Http、Telnet…
传输层:TCP、UDP
网络层:IP

TCP:
TCP头部信息、三次握手、四次挥手、重试机制、拥塞控制、滑动窗口。。。
UDP:头部信息

socket编程
同步、异步、阻塞、非阻塞
BIO(同步阻塞IO)、NIO(同步非阻塞IO)、AIO(异步非阻塞IO)

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

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

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

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

传输层:
数据单元:数据段
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模型 -》客户端(Client)和服务端(Server)
TCP中交互步骤
socket(IP+端口)-》8888

服务端: 客户端
bind(端口)
connect(连接 IP+端口)
listen(监听状态)

accept(返回和客户端连接的实例)

read/write(读写) read/write(读写)

close(关闭资源) close(关闭资源)

TCP协议:
编程联系
服务端代码:

复制代码
    public static void main(String[] args) throws IOException {
        //创建serversocket的实例
        ServerSocket serverSocket = new ServerSocket();
    
        //绑定端口
        serverSocket.bind(new InetSocketAddress(8888));
    //        System.out.println("服务端启动了");
        //监听并获得socket,该方法会阻塞
        Socket socket = serverSocket.accept();
    //        System.out.println(socket.getRemoteSocketAddress()+" 客户端连接上了");
        
        //可以进行读写操作
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    
        String msg = null;
        while ((msg = reader.readLine())!= null) {
            System.out.println(msg);
        }
    
        //关闭资源
        reader.close();
        socket.close();
        serverSocket.close();
    }

客户端代码:

复制代码
     public static void main(String[] args) throws IOException {
        //创建socket实例
        Socket socket = new Socket();
    
        //连接服务器  192.168.31.135
        socket.connect(new InetSocketAddress("127.0.0.1", 8888));
    //        System.out.println("客户端连接上服务器了");
    
        //发送消息
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello\n".getBytes());
    
        //关闭资源
        socket.close();
    }

注意:客户端连接服务端是,服务端必须先启动

TCP头部信息字段释义:
源端口号以及目的端口号
各占2个字节,端口是传输层和应用层的服务接口,用于寻找发送端和接收端的进程,
一般来讲,通过端口号和IP地址,可以唯一确定一个TCP连接,在网络编程中,通常被称为一个socket接口。
序号
占4字节,用来标识从TCP发送端向TCP接收端发送的数据字节流。
确认序号
占4字节,包含发送确认的一端所期望收到的下一个序号,
因此,确认序号应该是上次已经成功收到数据字节序号加1.
数据偏移
占4位,用于指出TCP首部长度,若不存在选项,则这个值为20字节,
数据偏移的最大值为60字节。
保留字段
占6位,暂时可忽略,值全为0
标志位
URG(紧急) : 为1时表明紧急指针字段有效
ACK(确认):为1时表明确认号字段有效
PSH(推送):为1时接收方应尽快将这个报文段交给应用层
RST(复位):为1时表明TCP连接出现故障必须重建连接
SYN(同步):在连接建立时用来同步序号
FIN (终止): 为1时表明发送端数据发送完毕要求释放连接
接收窗口
占2个字节,用于流量控制和拥塞控制,表示当前接收缓冲区的大小。
在计算机网络中,通常是用接收方的接收能力的大小来控制发送方的数据发送量。
TCP连接的一端根据缓冲区大小确定自己的接收窗口值,告诉对方,
使对方可以确定发送数据的字节数。
校验和
占2个字节,范围包括首部和数据两部分。
选项是可选的,默认情况是不选。

全部评论 (0)

还没有任何评论哟~