网络通信——socket

SOCKET

1、 IP地址

在互联网上要允许任何两台主机与任何其他的主机进行通讯,TCP/IP为每台主机分配了一个唯一的32位数字,即IP地址,IP地址对网上的某个节点来说是一个逻辑地址,它独立于任何特定的网络硬件和网络配置,IP地址由网络号和主机号两部分组成。

Ip地址可划分为5类,分别为A0)、B10)、C110)、D1110)、E11110

00000000 ~ 01111111 0~127

255.255.255.0

192.168.0.123   00000000

255.255.255.11000000

192.168.0.123   ACK j+1       192.168.123.11110000 SYN j

192.168.0.125  11000000 10100000

2、 TCP的建立与关闭

    127.0.0.1   11111111   00000000  00000000  00000000

第一字节

第二字节

第三字节

第四字节

0

1

2

3

4

5

6

7

0

1

2

3

4

5

6

7

0

1

2

3

4

5

6

7

0

1

2

3

4

5

6

7

源端口

目的端口

32位序号

32位确认号

首部长度

保留

U

R

G

A

C

K

P

S

H

R

S

T

S

Y

N

F

I

N

16位窗口大小

16为检验和

16位紧急指针

选项(如果需要)

TCP 头格式

 

3、 SOCKET编程

1、 面向连接编程(TCP

面向连接的网络应用程序开发流程比较固定,需要开发者创建服务器与客户端两个应用程序,通过网络是想进程间的通讯。

● 服务器端流程

创建套接字(socket)

服务绑定(bind)

服务侦听(listen)

处理新到连接(accept)

数据收发(recv\send

套接字关闭(close

● 客户端流程

① 客户端套接字创建(socket)

② 发起连接 (connect)

③  数据发收(send\recv)

 ④ 套接字关闭(close)

 

 

 

 

2、  无连接编程(对等编程UDP

   UDP编程流程

UDP套接字创建(socket)

地址与端口的绑定(bind)

数据收发       (sendto\recvfrom)

套接字关闭    (close)

 

 

 

3、 重要数据结构以及函数

● struct sockaddr_in

{

        short   sin_family;

        u_short sin_port;

        struct  in_addr sin_addr;

        char    sin_zero[8];

};

struct in_addr

{

union {

     struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;

     struct { u_short s_w1,s_w2; } S_un_w;

     u_long S_addr;

     } S_un;

#define s_addr  S_un.S_addr

                                /* can be used for most tcp & ip code */

#define s_host  S_un.S_un_b.s_b2

                                /* host on imp */

#define s_net   S_un.S_un_b.s_b1

                                /* network */

#define s_imp   S_un.S_un_w.s_w2

                                /* imp */

#define s_impno S_un.S_un_b.s_b4

                                /* imp # */

#define s_lh    S_un.S_un_b.s_b3

                                /* logical host */

};    

    

  unsigned long inet_addr (   

  const char FAR * cp  

);

char FAR * inet_ntoa (

  struct in_addr in  

);

 

相关头文件:

#include<sys/socket.h>

#include<netdb.h>

#include<netinet/in.h>

#include<arpa/inet.h>

 

函数原型

SOCKET PASCAL FAR socket(int af, int type, int protocol);

int PASCAL FAR bind(SOCKET s, const struct sockaddr *name, int namelen);

int PASCAL FAR listen(SOCKET s, int backlog);

SOCKET PASCAL FAR accept(SOCKET s, struct sockaddr *addr, int *addrlen);

int PASCAL FAR connect(SOCKET s,const struct sockaddr *name, int namelen);

int PASCAL FAR send(SOCKET s, const char *buf,int len,int falgs);

int PASCAL FAR recv(SOCKET s,char *buf,int len, int falgs);

ssize_t sendto(int sockfd, const void *buf, size_t len, int falgs, const struct sockaddr *to, socklen_t tolen);

ssize_t recvfrom(int sockfd, void *buf, int len,unsigned int flags, struct sockaddr *from, int *fromlen);

 

抓包命令:

-nn,直接以 IP  Port Number 显示,而非主机名与服务名称。
-i,后面接要「监听」的网络接口,例如 eth0, lo, ppp0 等等的接口。

tcpdump -i lo -nn <查看链接建立过程>

netstat -a | grep mmcc <监视链接状态>  netstat -apn | grep port

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值