网络协议归纳总结

1:网络编程(理解)
    (1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享
    (2)OSI模型:
        
    (3)网络编程的三要素
        A:IP地址
            a:点分十进制(其实就是把地址字节改成二进制)
            b:IP地址的组成
            c:IP地址的分类
            d:dos命令     1.ipconfig查本地ip  2.ping +ip  :测试本地跟这个ip之间的通讯有没有问题
            e:InetAddress 此类表示互联网协议 (IP) 地址
        B:端口
            是应用程序的标识。范围:0-65535。其中0-1024不建议使用。
        C:协议
            UDP:数据打包,有限制,不连接,效率高,不可靠
            TCP:建立数据通道,无限制,效率低,可靠
    (3)Socket机制
        A:通信两端都应该有Socket对象
        B:所有的通信都是通过Socket间的IO进行操作的


    (4)UDP协议发送和接收数据
        发送:
            创建UDP发送端的Socket对象
            创建数据并把数据打包
            发送数据
            释放资源
        DatagramSocket ds = new DatagramSocket();
        byte[] bys = "Helloworld".getBytes();
        DatagramPacket dp = new DatagramPacket(bys,by.length,InetAddress.getByName("CarryDiu"), 10086);
        ds.send(dp);
        ds.close();
            
        接收:
            创建UDP接收端的Socket对象
            创建数据包用于接收数据
            接收数据
            解析数据包
            释放资源
        DatagramSocket ds = new DatagramSocket(10086);
        //创建数据报包对象接收数据
        byte[] by = new byte[1024];//定义长度为1024字节的字节数组
        DatagramPacket dp = new DatagramPacket(by, by.length);
        ds.receive(dp);
        //解析数据
        String str = new String( dp.getData(),0,dp.getData().length);
        System.out.println(dp.getAddress().getHostAddress()+"-------"+str);

    (5)TCP协议发送和接收数据
        发送:
            创建TCP客户端的Socket对象
            获取输出流,写数据
            释放资源
        Socket s = new Socket("192.168.1.101",2332);//创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        String line = null;
        while((line=br.readLine())!=null){
            //键盘录入要自定义结束标记
            if("886".equals(line)){
                break;
            }
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        //bw.close();//通道关闭,bw不会存在
        br.close();    
        s.close();    
            
        接收(服务器端):
            创建TCP服务器端的Socket对象
            监听客户端连接
            获取输入流,读取数据
            释放资源
        ServerSocket ss = new ServerSocket(2332);//java.net.ServerSocket
        Socket s = ss.accept();//监听并接受到此套接字的连接
        BufferedReader br =  new BufferedReader(new InputStreamReader(s.getInputStream()));
        BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
        String line = null;
        while((line= br.readLine())!= null ){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        bw.close();
        s.close();

常见问题?

1.TCP三次握手?

第一次握手
    客户机发送连接请求报文段到服务器,并进入SYN_SENT状态,等待服务器确认。(SYN = 1,seq=x)

第二次握手
    服务器收到连接请求报文,如果同意建立连接,向客户机发回确认报文段,并为该TCP连接分配TCP缓存和变量。(SYN=1,ACK=1,seq=y,ack=x+1)。
第三次握手
    客户机收到服务器的确认报文段后,向服务器给出确认报文段,并且也要给该连接分配缓存和变量。此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。(ACK=1,seq=x+1,ack=y+1)。

2.OSI参考模型的分为哪几层,每层的功能?
OSI,开放系统互连参考模型,它的7个层次自顶到下依次为应用层,表示层,会话层,传输层,网络层,数据链路层和物理层

3.TCP协议和UDP协议的区别?
TCP协议是传输控制协议,UDP协议是用户数据报协议,两者都是传输层的协议,主要区别在于前者是可靠的,面向连接的协议,后者是不可靠的,无连接的协议。其它的区别还有,TCP协议传输速度慢,UDP常用于一次性传输比较少量数据的网络应用。

4.TCP三次握手为什么不能是两次?
主要是防止两次握手情况下已经失效的连接请求报文段突然又传送到服务端而产生错误。例如,客户机A向服务器B发送TCP连接请求,第一个连接请求报文在网络的某个节点长时间滞留,A超时后认为报文丢失,于是再重传一次连接请求,B收到后建立连接。数据传输完毕后双方断开连接,而这时之前滞留的连接请求到达了服务端B,而B认为A又发来连接请求。如果两次握手建立连接,A并无连接请求,造成B的资源浪费。

5.在浏览器中输入网址到显示出页面的整个过程?
(1) 输出包含域名的网址 (2) 浏览器向DNS请求解析域名对应的IP地址 (3) 域名系统DNS解析出域名对应的IP地址 (4) 浏览器与该服务器建立TCP连接 (5) 浏览器发送HTTP请求 (6) 服务器通过HTTP响应把页面文件发送给浏览器 (7) TCP连接释放 (8) 浏览器解释文件,并显示

猜你喜欢

转载自blog.csdn.net/weixin_41987553/article/details/82716163