其他分享
首页 > 其他分享> > SocketIO基础

SocketIO基础

作者:互联网

声明

文中提到的应用程序特指JAVA应用程序

本文涉及的Linux基础命令

netstat -natp  查看端口相关信息

lsof -p pid  查看某个进程打开的fd相关信息

ls -l /proc/pid/fd 查看某个进程打开的fd相关信息

什么是TCP

TCP是一种面向连接的、可靠的传输协议

Client(客户端)和 Server(服务端)建立连接需要经过三次握手,断开连接需要完成四次挥手

什么是Socket

Linux一切皆文件,Socket是其中一种文件类型

ls -l /proc/pid/fd  查看某个进程的fd可以看到socket文件类型

socket可以简单理解为ServerIP;ServerPort  +  ClientIP;ClientPort 这样一个四元组组成

端口的最大限制:65535

单进程fd数量限制:根据Linux系统用户的不同,可以修改不同的数量限制,使用ulimit -a 命令查询

ulimit -a
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8

查询所有进程已经使用的fd数量和允许使用的最大fd数量

cat /proc/sys/fs/file-nr
2048	0	585916

建立Socket连接时应用程序和内核的工作状况

应用程序间相互传输数据都需要经过内核

三次握手、四次挥手都是Server内核和Client内核之间进行的,不经过应用程序

内核为每个连接都设置了发送队列(缓冲区)和接收队列(缓冲区),当系统来不及处理数据时,会暂存在缓冲对列中,当超过缓冲队列大小时,新来的数据会被抛弃

通过netstat 命令可以看到发送队列(Send-Q)和接收队列(Recv-Q)中数据的大小

netstat -natp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       1      0 :::9090                 :::*                    LISTEN      4877/java           
tcp6      18      0 10.188.40.230:9090      10.188.40.231:51438     ESTABLISHED -        

如下图所示,Server服务部署在230机器,Client部署在231机器,231连接230,具体步骤如下:

传输数据包大小

数据包传输大小限制通过ifconfig 命令查看MTU

ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

实际传输的数据包大小通过tcpdump 抓包得到mss

Flags [S], seq 1457962801, win 29200, options [mss 1460,sackOK,TS val 1683212710 ecr 0,nop,wscale 7], length 0

 

标签:Socket,SocketIO,基础,应用程序,fd,内核,231,socket
来源: https://blog.csdn.net/edisonyuan/article/details/111129722