字节跳动Java面试还要问网络知识?懂一点就好

2年前 (2023) 程序员胖胖胖虎阿
180 0 0

🍅 作者简介:CSDN2021博客之星亚军🏆、新星计划导师✌、博客专家💪

🍅 哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

🍅 关注公众号【哪吒编程】,回复1024,获取Java学习路线思维导图、大厂面试真题、加入万粉计划交流群、一起学习进步

目录

    • 一、TCP与UDP
    • 二、基于TCP协议的面向连接的套接字(Internet Socket)
      • 1、TCP
      • 2、流格式套接字
      • 3、SOCK_STREAM有以下特点
    • 三、基于UDP协议的无连接的套接字(Datagram Sockets)
      • 1、UDP
      • 2、数据报格式套接字
      • 3、SOCK_DGRAM有以下特点
    • 四、接收数据的阻塞问题
      • 1、TCP
      • 2、UDP
    • 五、TCP实现数据上传
      • 1、TCP服务端
      • 2、TCP客户端
      • 3、测试
    • 六、UDP实现数据上传
      • 1、UDP接收端
      • 2、UDP发送端
      • 3、测试
    • 七、网络层的安全问题
      • 1、安全问题都有哪些?
      • 2、ipidea简介
      • 更多详见全球领先的互联网大数据IP资源
      • 3、ipidea生成api链接,复制链接即可应用
      • 4、生成代理ip操作使用方式

一、TCP与UDP

TCP(Transmission Control Protocol,传输控制协议)协议:负责将要传输的文件分段 进行传输,一般用于建立会话 ,其基本特性是可靠传输 、流量控制,所谓三握手、四挥手也是基于TCP协议的。

UDP(User Data Protocol,用户数据报协议)协议:一个数据包就能够完成数据通信 ,数据包不分段 ,不需要建立会话 ,不需要流量控制 ,属于不可靠传输 , 屏幕广播 、多播 、广播都是基于UDP协议。

二、基于TCP协议的面向连接的套接字(Internet Socket)

1、TCP

The Transmission Control Protocol 传输控制协议。

2、流格式套接字

我们经常讲的套接字也就是Internet Scoket,根据数据传输方式,可以将Internet Scoket分为几种,在使用socket()创建网络连接时,必须告诉它是哪一种数据传输方式,简单来说就是数据传输的控制协议。

计算机领域称之为:流格式套接字(Stream Sockets),在计算机代码中使用SOCK_STREAM表示。

3、SOCK_STREAM有以下特点

  • 可靠的、双向的通信数据流;
  • 数据传输是按照顺序进行的;
  • 数据在传输中是准确无误的,是自带重发机制的;
  • 数据的发送和接收是不同步的,存在缓冲区;
  • 流格式套接字的典型应用就是HTTP协议,因为浏览器在加载进行解析时必须要数据完整正确。

三、基于UDP协议的无连接的套接字(Datagram Sockets)

1、UDP

User Datagram Protocol 用户数据报协议。

2、数据报格式套接字

基于UDP协议的无连接的套接字,计算机领域称之为:数据报格式套接字(Datagram Sockets),计算机代码中使用SOCK_DGRAM表示。

SOCK_DGRAM是一种高效率、高速度、不可靠的通信数据流。其是基于UDP协议的,不用进行数据校验,只进行数据传输。

3、SOCK_DGRAM有以下特点

  • 每次传输数据大小有限制;
  • 追求高效率、高速度;
  • 传输的数据可能丢失或者损坏(小概率事件);
  • 数据的发送和接收是同步的,也就是存在数据边界;
  • 数据报格式的典型应用就是QQ视频和语音,因为这两者的需求是高效率和低延时,同时小概率的丢失数据不会影响整个数据的传输质量。

四、接收数据的阻塞问题

1、TCP

如果没有数据,阻塞Socket就会等,直到有数;

非阻塞Socket返回WSAEWOULDBLOCK;

如果有数据,有多少就收多少。

2、UDP

如果没有数据,阻塞Socket就会等;

非阻塞Socket返回WSAEWOULDBLOCK;

如果有数据,它是会等整个发包到齐,并接收到整个发包,才返回。

五、TCP实现数据上传

1、TCP服务端

package com.tcpip;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
 
public class TcpServerTest {
    public static void main(String[] args) throws Exception {
        //1、创建服务
        ServerSocket serverSocket = new ServerSocket(9000);
        //2、监听客户端连接
        Socket socket = serverSocket.accept();
        //3、获取输入流
        InputStream is = socket.getInputStream();
        //4、文件输出
        FileOutputStream fos = new FileOutputStream(new File("copy.png"));
        byte[] buffer = new byte[1024];
        int len;
        while ((len=is.read(buffer))!=-1){
            fos.write(buffer,0,len);
        }
        //5、关闭资源
        fos.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}

2、TCP客户端

package com.tcpip;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
 
public class TcpClientTest {
    public static void main(String[] args) throws Exception {
        //1、创建一个socket连接
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);
        //2、创建一个输出流
        OutputStream os = socket.getOutputStream();
        //3、读取文件
        FileInputStream fis = new FileInputStream(new File("01.png"));
        //4、写入文件
        byte[] buffer = new byte[1024];
        int len;
        while ((len=fis.read(buffer))!=-1){
            os.write(buffer,0,len);
        }
        //5.关闭资源
        fis.close();
        os.close();
        socket.close();
    }
}

3、测试

字节跳动Java面试还要问网络知识?懂一点就好

六、UDP实现数据上传

1、UDP接收端

package com.tcpip;
 
import java.net.DatagramPacket;
import java.net.DatagramSocket;
 
public class UdpServerTest {
    public static void main(String[] args) throws Exception {
        //1、开放端口
        DatagramSocket socket = new DatagramSocket(9090);
        //2、接收数据包
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
        socket.receive(packet);
        System.out.println(new String(packet.getData(),0,packet.getData().length));
        //3、关闭连接
        socket.close();
    }
}

2、UDP发送端

package com.tcpip;
 
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
 
public class UdpClientTest {
    public static void main(String[] args) throws Exception {
        //1、建立一个socket
        DatagramSocket socket = new DatagramSocket();
        //2、建个包
        String msg = "UDP 测试";
        InetAddress localhost = InetAddress.getByName("localhost");
        int port  = 9090;
        DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
        //3、发送包
        socket.send(packet);
        //4、关闭资源
        socket.close();
    }
}

3、测试

字节跳动Java面试还要问网络知识?懂一点就好

七、网络层的安全问题

1、安全问题都有哪些?

  1. IP欺骗攻击
  2. Smurf攻击(DDOS攻击的一种)
  3. ICMP重定向和不可达攻击
  4. IP地址扫描攻击

2、ipidea简介

ipidea是一家海外爬虫代理商,提供海外住宅ip和海外静态ip,主要是做数据采集的业务,与多个数据采集企业保持长期的合作。它提供9000万ip资源,可以根据抓取需求自定义设置ip轮换时间,从而避免被网站阻止访问。支持账密认证和API提取两种方式提取ip资源,最重要的是支持免费测试。

更多详见全球领先的互联网大数据IP资源

字节跳动Java面试还要问网络知识?懂一点就好

3、ipidea生成api链接,复制链接即可应用

普匿或者透明的ip在进行测试提取ip的同时会浪费大量的时间,最后,可能还会是失效的ip。只是就可以使用代理ip,使用的方式更为的简单,不论是实用性,稳定性、安全性都可以的到保障。使用IPIDEA进行ip提取使用。
字节跳动Java面试还要问网络知识?懂一点就好

4、生成代理ip操作使用方式

在进行服务器维护或者是自己整的代理ip时,很多的使用在都不会进行维护,因此很多的代理ip出现,代理ip的使用相对来说比较简单,有问题可以及时的向代理商进行反馈寻找技术人员进行解决。使用爬虫都是为了快速的完成工作需求,使用代理可以节省工作时间,快速的完成工作。

🍅 作者简介:CSDN2021博客之星亚军🏆、新星计划导师✌、博客专家💪

🍅 哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

🍅 关注公众号【哪吒编程】,回复1024,获取Java学习路线思维导图、大厂面试真题、加入万粉计划交流群、一起学习进步

字节跳动Java面试还要问网络知识?懂一点就好


关注公众号,回复1024,获取Java学习路线思维导图、加入万粉计划交流群

相关文章

暂无评论

暂无评论...