wix建设网站,软件库大全,泰安最好网站建设公司,咚咚抢网站怎么做的本文使用的是Wireshark 4.0.3, Java 11 编写简易服务器#xff0c;客户端使用Chrome浏览器移动端开发或是前、后端开发又或是高大上的云计算都脱离不了网络#xff0c;离开了网络的计算机就是一个孤岛#xff0c;快速上手开发、背面试八股文固然有些急功近利#xff0c;但确…本文使用的是Wireshark 4.0.3, Java 11 编写简易服务器客户端使用Chrome浏览器移动端开发或是前、后端开发又或是高大上的云计算都脱离不了网络离开了网络的计算机就是一个孤岛快速上手开发、背面试八股文固然有些急功近利但确实是一种捷径但经历过N年的应用开发后还是要从原理的角度搞清楚某项技术的来龙去脉虽然有些痛苦但好在也只是精神上面的克服之后身体的灵活性不可同日而语, 在武林高手看来这就打通了全身筋脉一、安装Wiresharkhttps://www.wireshark.org启动后的主界面二、安装Java 11 和任意一款能编写Java代码的工具如Editplus,Notepad,Eclipse,Idea...三、使用Java编写简单的Web服务器有经验的朋友应该明白是用ServerSocket和Socket, 这哥俩配合很默契使用起来简单便捷, 一对好基友惊喜连绵public class App {public static void main( String[] args ) throws Exception {ServerSocket serverSocket new ServerSocket(8080);while(true) {System.out.println(waiting...);Socket socket serverSocket.accept();System.out.println(ok);}}
}启动这个应用四、设置一下Wireshark打开菜单 捕获/ 选项五、打开Chrome浏览器对浏览器进行一些简单设置在地址栏中输入http://localhost:8080并回车六、打开Wireshark看看浏览器是如何连接服务器的偷窥网络数据包三次握手TCP数据包三次握手三个包三个包数据如下第一次握手59123 → 8080 [SYN] Seq0 Win65535 Len0 MSS65475 WS256 SACK_PERM第二次握手8080 → 59123 [SYN, ACK] Seq0 Ack1 Win65535 Len0 MSS65475 WS256 SACK_PERM第三次握手59123 → 8080 [ACK] Seq1 Ack1 Win2618880 Len0三次握手的数据包信息要看明白还是要了解TCP/IP协议SYN表示正在发起连接请求TCP连接是双向的所以建立连接时双方都要发送SYN可以看到第二个包中也有SYNSeq表示当前传输数据的数据段号因为TCP是有序传输所以每个数据段都需要这样一个序号使用序号的目的是因为如果接收端数据包乱序了可以重组成有序, 此处为什么Seq0原因在于Wireshark默认将其设置成了相对值可以在Wireshark中配置, 将下图中的红线部分的勾去掉TCP连接中不管是请求端还是响应端双方都需要维护一个Seq号所以你会发现第二次握手从8080到59123 也发送了一个SeqLen是指数据的长度这个长度是不包含TCP头的Ack表示确认号意思是接收连接的一方向发送连接的一方确认收到了多少数据Win意思是向对方明示我这边接收数据的窗口(可认为是缓存)大小连接建立好之后浏览器向服务器发送了一个HTTP请求,但是我在代码中并没有编写响应内容所以在浏览器中看到的结果就是无法访问此网站七、完善服务端代码让它给浏览器一个响应public class App
{public static void main( String[] args ) throws Exception{ServerSocket serverSocket new ServerSocket(8080);while(true) {System.out.println(waiting...);Socket socket serverSocket.accept();System.out.println(ok);//读取HTTP协议请求头BufferedReader in new BufferedReader(new InputStreamReader(socket.getInputStream()));String s ;while(!(sin.readLine()).equals()) {System.out.println(s);}PrintWriter out new PrintWriter(socket.getOutputStream(),true);String msg h1Hello Chrome/h1;//拼接HTTP协议响应头out.write(HTTP/1.1 200 OK\r\n);out.write(Content-Type: text/html; charsetutf-8\r\n);out.write(Content-Length: msg.getBytes().length \r\n);out.write(\r\n);//向客户端写数据out.write(msg);out.flush();}}
}观察HTTP响应头可以看到最后负载的数据八、总结通过编写一个简易的服务器使用Chrome浏览器发送请求并使用Wireshark抓包了解了TCP的三次握手过程如果想知道TCP头的每一个参数的含义推荐阅读TCP/IP详解可以从包中读出网络分层在最后一层中用的是HTTP协议