std協議
❶ MIL-STD-1553B的協議晶元國產化
基於對1553B規范復和gjb289a-97的消化理解,通過FPGA來實現制MIL-STD-1553B協議是可行的,目前的科研院所和相關的單位在這方面作了大量的工作,設計出的協議晶元已經能夠完全符合1553B規范。恩菲特科技於2005年推出的EP-H31580就是典型的代表,其性能指標達到國外同類產品水平。基於EP-H31580開發的1553B板卡的匯流排已經包括了PCI、PXI/CPCI、VXI、PC/104、PC/104+、PCMCIA等;在多家航空航天和兵器領域的科研院所和生產單位得到了廣泛的應用!
❷ Modbus plus、 modbus RTPS、 modbus RTU、modbus STD有什麼區別那些可以通用
首先對這些協議做個基本了解:
modbus RTU:Modicon公司(現為施耐德電氣的一個品專牌)在1978年發明,它是一種基於屬串列鏈路(如RS232/422/485)的協議,採用主站-從站結構。
Modbus plus:Modicon公司在1989年開發推出,它採用了令牌傳遞、對等方式、即插即用的網路結構,是一種更快的工業現場匯流排網路。
Modbus TCP:Modicon公司在1998年開發推出,它採用基於TCP/IP乙太網的通信方式。
modbus RTPS:由Modbus-IDA組織提交的基於TCP/IP的Modbus和RTPS(Real—time Publish/Subscribe:實時數據的發布與訂閱)協議。
❸ 利用ICMP協議編寫一個自己的Ping應用程序(用C++)
#pragma pack(4)
#define WIN32_LEAN_AND_MEAN
#include <WINSOCK2.H>
#include <STDIO.H>
#include <STDLIB.H>
#define ICMP_ECHO 8
#define ICMP_ECHOREPLY 0
#define ICMP_MIN 8 // minimum 8 byte icmp packet (just header)
/* The IP header */
typedef struct iphdr {
unsigned int h_len:4; // length of the header
unsigned int version:4; // Version of IP
unsigned char tos; // Type of service
unsigned short total_len; // total length of the packet
unsigned short ident; // unique identifier
unsigned short frag_and_flags; // flags
unsigned char ttl;
unsigned char proto; // protocol (TCP, UDP etc)
unsigned short checksum; // IP checksum
unsigned int sourceIP;
unsigned int destIP;
}IpHeader;
//
// ICMP header
//
typedef struct _ihdr {
BYTE i_type;
BYTE i_code; /* type sub code */
USHORT i_cksum;
USHORT i_id;
USHORT i_seq;
/* This is not the std header, but we reserve space for time */
ULONG timestamp;
}IcmpHeader;
#define STATUS_FAILED 0xFFFF
#define DEF_PACKET_SIZE 32
#define MAX_PACKET 1024
#define xmalloc(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s))
#define xfree(p) HeapFree (GetProcessHeap(),0,(p))
void fill_icmp_data(char *, int);
USHORT checksum(USHORT *, int);
void decode_resp(char *,int ,struct sockaddr_in *);
void Usage(char *progname){
fprintf(stderr,"Usage:\n");
fprintf(stderr,"%s <HOST> [data_size]\n",progname);
fprintf(stderr,"datasize can be up to 1Kb\n");
ExitProcess(STATUS_FAILED);
}
int main(int argc, char **argv){
WSADATA wsaData;
SOCKET sockRaw;
struct sockaddr_in dest,from;
struct hostent * hp;
int bread,datasize;
int fromlen = sizeof(from);
int timeout = 1000;
char *dest_ip;
char *icmp_data;
char *recvbuf;
unsigned int addr=0;
USHORT seq_no = 0;
if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0){
fprintf(stderr,"WSAStartup failed: %d\n",GetLastError());
ExitProcess(STATUS_FAILED);
}
if (argc <2 ) {
Usage(argv[0]);
}
sockRaw = WSASocket (AF_INET,
SOCK_RAW,
IPPROTO_ICMP,
NULL, 0,0);
if (sockRaw == INVALID_SOCKET) {
fprintf(stderr,"WSASocket() failed: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
bread = setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,
sizeof(timeout));
if(bread == SOCKET_ERROR) {
fprintf(stderr,"failed to set recv timeout: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
timeout = 1000;
bread = setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,
sizeof(timeout));
if(bread == SOCKET_ERROR) {
fprintf(stderr,"failed to set send timeout: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
memset(&dest,0,sizeof(dest));
hp = gethostbyname(argv[1]);
if (!hp){
addr = inet_addr(argv[1]);
}
if ((!hp) && (addr == INADDR_NONE) ) {
fprintf(stderr,"Unable to resolve %s\n",argv[1]);
ExitProcess(STATUS_FAILED);
}
if (hp != NULL)
memcpy(&(dest.sin_addr),hp->h_addr,hp->h_length);
else
dest.sin_addr.s_addr = addr;
if (hp)
dest.sin_family = hp->h_addrtype;
else
dest.sin_family = AF_INET;
dest_ip = inet_ntoa(dest.sin_addr);
if (argc >2) {
datasize = atoi(argv[2]);
if (datasize == 0)
datasize = DEF_PACKET_SIZE;
}
else
datasize = DEF_PACKET_SIZE;
datasize += sizeof(IcmpHeader);
icmp_data = xmalloc(MAX_PACKET);
recvbuf = xmalloc(MAX_PACKET);
if (!icmp_data) {
fprintf(stderr,"HeapAlloc failed %d\n",GetLastError());
ExitProcess(STATUS_FAILED);
}
memset(icmp_data,0,MAX_PACKET);
fill_icmp_data(icmp_data,datasize);
while(1) {
int bwrote;
((IcmpHeader*)icmp_data)->i_cksum = 0;
((IcmpHeader*)icmp_data)->timestamp = GetTickCount();
((IcmpHeader*)icmp_data)->i_seq = seq_no++;
((IcmpHeader*)icmp_data)->i_cksum = checksum((USHORT*)icmp_data,
datasize);
bwrote = sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)&dest,
sizeof(dest));
if (bwrote == SOCKET_ERROR){
if (WSAGetLastError() == WSAETIMEDOUT) {
printf("timed out\n");
continue;
}
fprintf(stderr,"sendto failed: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
if (bwrote < datasize ) {
fprintf(stdout,"Wrote %d bytes\n",bwrote);
}
bread = recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&from,
&fromlen);
if (bread == SOCKET_ERROR){
if (WSAGetLastError() == WSAETIMEDOUT) {
printf("timed out\n");
continue;
}
fprintf(stderr,"recvfrom failed: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
decode_resp(recvbuf,bread,&from);
Sleep(1000);
}
return 0;
}
/*
The response is an IP packet. We must decode the IP header to locate
the ICMP data
*/
void decode_resp(char *buf, int bytes,struct sockaddr_in *from) {
IpHeader *iphdr;
IcmpHeader *icmphdr;
unsigned short iphdrlen;
iphdr = (IpHeader *)buf;
iphdrlen = iphdr->h_len * 4 ; // number of 32-bit words *4 = bytes
if (bytes < iphdrlen + ICMP_MIN) {
printf("Too few bytes from %s\n",inet_ntoa(from->sin_addr));
}
icmphdr = (IcmpHeader*)(buf + iphdrlen);
if (icmphdr->i_type != ICMP_ECHOREPLY) {
fprintf(stderr,"non-echo type %d recvd\n",icmphdr->i_type);
return;
}
if (icmphdr->i_id != (USHORT)GetCurrentProcessId()) {
fprintf(stderr,"someone else's packet!\n");
return ;
}
printf("%d bytes from %s:",bytes, inet_ntoa(from->sin_addr));
printf(" icmp_seq = %d. ",icmphdr->i_seq);
printf(" time: %d ms ",GetTickCount()-icmphdr->timestamp);
printf("\n");
}
USHORT checksum(USHORT *buffer, int size) {
unsigned long cksum=0;
while(size >1) {
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size ) {
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
/*
Helper function to fill in various stuff in our ICMP request.
*/
void fill_icmp_data(char * icmp_data, int datasize){
IcmpHeader *icmp_hdr;
char *datapart;
icmp_hdr = (IcmpHeader*)icmp_data;
icmp_hdr->i_type = ICMP_ECHO;
icmp_hdr->i_code = 0;
icmp_hdr->i_id = (USHORT)GetCurrentProcessId();
icmp_hdr->i_cksum = 0;
icmp_hdr->i_seq = 0;
datapart = icmp_data + sizeof(IcmpHeader);
//
// Place some junk in the buffer.
//
memset(datapart,'E', datasize - sizeof(IcmpHeader));
}
❹ 電子郵件的五層協議是什麼 寫出功能圖和詳細分析。
電子郵件的工作過程遵循客戶-伺服器模式。每份電子郵件的發送都要涉及到發送方與接收方,發送方式構成客戶端,而接收方構成伺服器,伺服器含有眾多用戶的電子信箱。發送方通過郵件客戶程序,將編輯好的電子郵件向郵局伺服器(SMTP伺服器)發送。郵局伺服器識別接收者的地址,並向管理該地址的郵件伺服器(POP3伺服器)發送消息。郵件伺服器識將消息存放在接收者的電子信箱內,並告知接收者有新郵件到來。接收者通過郵件客戶程序連接到伺服器後,就會看到伺服器的通知,進而打開自己的電子信箱來查收郵件。
通常Internet上的個人用戶不能直接接收電子郵件,而是通過申請ISP主機的一個電子信箱,由ISP主機負責電子郵件的接收。一旦有用戶的電子郵件到來,ISP主機就將郵件移到用戶的電子信箱內,並通知用戶有新郵件。因此,當發送一條電子郵件給一另一個客戶時,電子郵件首先從用戶計算機發送到ISP主機,再到Internet,再到收件人的ISP主機,最後到收件人的個人計算機。
ISP主機起著「郵局」的作用,管理著眾多用戶的電子信箱。每個用戶的電子信箱實際上就是用戶所申請的帳號名。每個用戶的電子郵件信箱都要佔用ISP主機一定容量的硬碟空間,由於這一空間是有限的,因此用戶要定期查收和閱讀電子信箱中的郵件,以便騰出空間來接收新的郵件。
准確的說是七層,而不是五層,他們分別是
7.應用層
TELNET FTP TFTP SMTP SNMP HTTP BOOTP DHCP
6:表示層
文本:ASCII,EBCDIC
圖形:TIFF,JPEG,GIF,PICT
聲音:MIDI,MPEG,QUICKTIME
5:會話層
NFS SQL RPC X-WINDOWS ASP(APPTALK會話協議)SCP
4:傳輸層
TCP/IP----TCP和UDP NOVELL---IPX SPX
3:網路層
IP IPX
2:數據鏈路層
乙太網 IEEE802.3 令牌環 IEEE802.5 HDLC PPP
1:物理層
10BASE T 10BASE TX V.35 RS-232 100BASE T 100BASE TX 1000BASE T 1000BASE TX 100BASE F 100BASE FX
你說的應該是網際網路協議堆,如果說網際網路協議堆按5層來劃分,第4層就是傳輸層(transport layer),它是應用層(第5層)和網路層(第3層)之間的介面。傳輸層為應用層上的應用提供兩類截然不同的服務:第一類服務叫做可靠的面向連接服務(connection-oriented service),確保正確無誤地把消息從源端傳送到目的地,使用的協議是TCP協議。第二類服務是不可靠的無連接服務(unreliable, connectionless service),使用的協議是用戶數據包協議UDP(User Datagram Protocol)。一般來說,應用層協議運行在操作系統之上,而傳輸層協議集成在操作系統之中。因此,當設計網路應用時,設計人員必需要指定其中的一種網路傳輸協議,網路多媒體應用通常使用UDP協議。
一個網路單元層n(layer n)與另一個網路單元層n(layer n)交換的消息是層n(layer n)上的消息,這些消息稱為層n協議數據單元(layer-n protocol data unit,n-PDU)。如圖15-18所示,主機A的傳輸層與主機B的傳輸層交換的消息就是傳輸層上的消息,這叫做邏輯上的端-端傳輸,當信息包通過中間設備(例如路由器、網橋和中繼器等設備)時,這些網路設備對使用UDP協議的信息包和使用TCP協議的信息包將一視同仁。在一些網路文獻中,通常把使用UDP的協議數據單元(protocol data unit,PDU)稱為數據包(datagram),但網路文獻也使用數據包(datagram)這個術語表示網路層的PDU,名詞術語不統一就會使人很混亂。為了簡化術語,本書把傳輸層上的協議數據單元PDU稱為消息段(segment),或者就叫做傳輸層協議數據單元。
15.4.2 埠號和套接號的概念
在客戶機/服務機(client/server)運行模式中,一端的主機叫做客戶機,另一端的主機叫做服務機。一台服務機可以同時運行同一應用程序的幾個進程,例如服務機上的FTP服務軟體可以同時給幾個客戶傳送文件,對每個客戶至少要調用一個FTP服務軟體的進程。同樣,一個客戶可以同時與幾台不同的主機進行遠程對話,對每個不同的主機,客戶軟體至少要調用一個遠程客戶軟體的進程。因此,對連網計算機上的進程就需要相互聯系的埠號來遞送IP信息包。
在網際網路上,所有使用TCP或者UDP協議的應用程序都有一個標識協議本身的永久性埠號(port number)。例如,我們在設置Web瀏覽器或者FTP文件傳輸程序時會經常遇到的埠號:HTTP的埠號=80,FTP的埠號=21,電子郵件協議SMTP的埠號=25,Telnet的埠號=23,這些埠號叫做眾所周知的埠號(well-known port number)。埠號的分配定義在RFC 1700中,並在1994年成為一個標准,標准號是STD0002。可供TCP使用的埠號共計65,535,一般來說,大於255的埠號由本地的機器使用,小於255的埠號用於頻繁使用的進程,0和255是保留埠號。
收發兩端的傳輸層TCP之間的通信由兩個號碼的組合來鑒別,一個是機器的IP地址,另一個是TCP軟體使用的埠號,這兩個號碼組合在一起就叫做套接標識符(socket)或者叫做套接號,而且收發雙方都需要有套接標識符。因為在互聯網上機器的IP地址是唯一的,而對單台機器的埠號也是唯一的,因此套接標識符在互聯網上也是唯一的,這就可通過套接標識符使互聯網路上的進程之間相互通信。互聯網上收發兩端的進程之間的通信建立過程.
15.4.3 用戶數據包傳輸協議(UDP)
1. UDP協議簡介
網際網路為網路應用提供有兩種不同的傳輸協議:用戶數據包傳輸協議(User Datagram Protocol,UDP)和傳輸控制協議TCP(Transfer Control Protocol)。不同的網路應用使用不同的協議,如圖15-20所示。例如,HTTP使用TCP協議,而普通文件傳輸協議(Trivial File Transfer Protocol,TFTP)則使用UDP。
UDP協議不提供端-端的確認和重傳功能,它不保證信息包一定能到達目的地,因此稱為不可靠協議。應用開發人員選擇UDP時,應用層協議軟體幾乎是直接與IP通信。
應用層協議
HTTP,FTP,Telnet,SMTP,NNTP,……
TFTP,RTP,Real Audio,……
傳輸層協議
TCP
UDP
網路層
IP,ICMP,IGMP
HTTP(Hypertext Transfer Protocol) 超文本傳送協議
FTP(File Transfer Protocol) 文件傳輸協議
Telnet 遠程聯接服務標准協議
SMTP(Simple Mail Transfer Protocol) 簡單郵件傳輸協議
RTP(Real-time Transport Protocol) 實時傳輸協議
UDP有下述幾個特性:
(1) UDP是一個無連接協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並盡可能快地把它扔到網路上。在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
(2) 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一台服務機可同時向多個客戶機傳輸相同的消息。
(3) UDP信息包的標題很短,只有8個位元組,相對於TCP的20個位元組信息包的額外開銷很小。
(4) 吞吐量不受擁擠控制演算法的調節,只受應用軟體生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
雖然UDP是一個不可靠的協議,但它是分發信息的一個理想協議。例如,在屏幕上報告股票市場、在屏幕上顯示航空信息等等。UDP也用在路由信息協議RIP(Routing Information Protocol)中修改路由表。在這些應用場合下,如果有一個消息丟失,在幾秒之後另一個新的消息就會替換它。UDP廣泛用在多媒體應用中,例如,Progressive Networks公司開發的RealAudio軟體,它是在網際網路上把預先錄制的或者現場音樂實時傳送給客戶機的一種軟體,該軟體使用的RealAudio audio-on-demand protocol協議就是運行在UDP之上的協議,大多數網際網路電話軟體產品也都運行在UDP之上。
2. UDP協議的標題結構
UDP信息包由UDP標題和數據組成。UDP的標題結構如圖15-21所示,它由5個域組成:源端埠(Source Port)、目的地埠(Destination Port)、用戶數據包的長度(Length)和檢查和(Checksum)。其中,前4個域組成UDP標題(UDP header),每個域由4個位元組組成;檢查和域占據2個位元組,它用來檢測傳輸過程中是否出現了錯誤;用戶數據包的長度包括所有5個域的位元組數。檢查和的詳細計算可在RFC 1071中找到,現舉一例說明使用檢查和檢測錯誤的道理。例如,假設從源端A要發送下列3個16位的二進制數:word1,word2和word3到終端B,檢查和計算如下:word1
0110011001100110
word2
0101010101010101
word3
0000111100001111
sum=word1+ word2+ word3
1100101011001010
檢查和(sum的反碼)
0011010100110101
從發送端發出的4個(word1,2,3以及檢查和)16位二進制數之和為1111111111111111,如果接收端收到的這4個16位二進制數之和也是全「1」,就認為傳輸過程中沒有出差錯。
許多鏈路層協議都提供錯誤檢查,包括流行的乙太網協議,讀者也許想知道為什麼UDP也要提供檢查和。其原因是鏈路層以下的協議在源端和終端之間的某些通道可能不提供錯誤檢測。雖然UDP提供有錯誤檢測,但檢測到錯誤時,UDP不做錯誤校正,只是簡單地把損壞的消息段扔掉,或者給應用程序提供警告信息。
讀者也可能會問,收發兩端的兩個進程是否有可能通過UDP提供可靠的數據傳輸?答案是可以的。但必需要把確認和重傳措施加到應用程序中,應用程序不能指望UDP來提供可靠的數據傳輸。
15.4.4 傳輸控制協議(TCP)
1. TCP協議簡介
傳輸控制協議TCP(Transmission Control Protocol)是TCP/IP協議堆中的一部分。消息在網路內部或者網路之間傳遞時要打包,TCP負責把來自高層協議的數據裝配成標準的數據包,相當於在數據包上貼包裝清單,而IP則相當於在數據包上貼收、發人的姓名和地址,TCP和IP之間要進行相互通信才能完成數據的傳輸。TCP/IP協議中的IP主要負責在計算機之間搬運數據包,而TCP主要負責傳輸數據的正確性。TCP/IP有3個主要的特性:功能豐富,開放性和普遍型。隨著新的網路服務的不斷出現,TCP/IP協議也在不斷修改和擴充。
TCP是傳輸層上的協議,該協議定義在RFC 793,RFC 1122,RFC 1323和RFC 2001文件中。目前,TCP協議比UDP協議用得更廣泛,也更復雜。
TCP是面向連接的協議。面向連接的意思是在一個應用程序開始傳送數據到另一個應用程序之前,它們之間必須相互溝通,也就是它們之間需要相互傳送一些必要的參數,以確保數據的正確傳送。
TCP是全雙工的協議。全雙工(full plex)的意思是,如果在主機A和主機B之間有連接,A可向B傳送數據,而B也可向A傳送數據。TCP也是點對點的傳輸協議,但不支持多目標廣播。TCP連接一旦建立,應用程序就不斷地把數據送到TCP發送緩存(TCP send buffer),如圖15-22 所示TCP就把數據流分成一塊一塊(chunk),再裝上TCP協議標題(TCP header)以形成TCP消息段(TCP segment)。這些消息段封裝成IP數據包(IP datagram)之後發送到網路上。當對方接收到消息段之後就把它存放到TCP接收緩存(TCP receive buffer)中,應用程序就不斷地從這個緩存中讀取數據。
TCP為應用層和網路層上的IP提供許多服務,其中3個最重要的服務是:(1) 可靠地傳輸消息:為應用層提供可靠的面向連接服務,確保發送端發出的消息能夠被接收端正確無誤地接收到。接收端的應用程序確信從TCP接收緩存中讀出的數據是否正確是通過檢查傳送的序列號(sequence number)、確認(acknowledgement)和出錯重傳(retransmission)等措施給予保證的。
(2) 流程式控制制:連接雙方的主機都給TCP連接分配了一定數量的緩存。每當進行一次TCP連接時,接收方主機只允許發送端主機發送的數據不大於緩存空間的大小。如果沒有流程式控制制,發送端主機就可能以比接收端主機快得多的速度發送數據,使得接收端的緩存出現溢出。
(3) 擁擠控制:TCP保證每次TCP連接不過分加重路由器的負擔。當網路上的鏈路出現擁擠時,經過這個鏈路的TCP連接將自身調節以減緩擁擠。
2 TCP協議標題的結構
如前所述,TCP遞給IP的數據塊叫做消息段(segment)。這個消息段由TCP協議標題域(TCP header field)和存放應用程序的數據域(header fields)組成,如TCP協議標題有很多域組成,現將幾個比較重要的域作一個簡單介紹。
(1) 源端埠號(Source Port Number)域和目的地埠號(Destination port Number)域:前者的16位域用來識別本機TCP;後者的16域用來識別遠程機器的TCP。
(2) 順序號(sequence number)域和確認號(acknowledgment number)域:這兩個域是TCP標題中兩個最重要的域。32位的順序號域用來指示當前數據塊在整個消息中的位置,而32位的確認號域用來指示下一個數據塊順序號,也可間接表示最後接收到的數據塊順序號。順序號域和確認號域由TCP收發兩端主機在執行可靠數據傳輸時使用。
在介紹順序號(sequence number)和確認號(acknowledgement number)之前,首先要介紹TCP最大消息段大小(maximum segment size,MSS)的概念。在建立TCP連接期間,源端主機和終端主機都可能宣告最大消息段大小MSS和一個用於連接的最小消息段大小。如果有一端沒有宣告MSS,就使用預先約定的位元組數(如1500,536或者512位元組)。當TCP發送長文件時,就把這個文件分割成許多按照特定結構組織的數據塊(chunk),除了最後一個數據塊小於MSS外,其餘的數據塊大小都等於MSS。在交互應用的情況下,消息段通常小於MSS,像Telnet那樣的遠程登錄應用中,TCP消息段中的數據域通常僅有一個位元組。
在TCP數據流中的每個位元組都編有號碼。例如,一個106位元組長的文件,假設MSS為103位元組,第一個位元組的順序號定義為
❺ c++串口通訊協議問題
#include<iostream>
#include<string>
#include<cstdlib>
usingnamespacestd;
intmain(intargc,char*argv[])
{
stringa="105.609997618466";
intb=atoi(a.c_str());
cout<<b<<endl;
return0;
}
或者
#include<iostream>
#include<string>
#include<sstream>
usingnamespacestd;
intmain(intargc,char*argv[])
{
stringa="105.609997618466";
stringstreamss;
ss<<a;
ss>>b;
cout<<b<<endl;
return0;
}
❻ 路由器中bsstd什麼意思
映射就是指將對網關(或者路由器)的某個埠訪問指向到內網的某個IP地址上。
作用:外網是無法訪問內網的電腦的。但如果做了一個映射的話,你就可以將內網電腦的某些內容提供給外網的設備進行訪問。
舉個例子:
在內網地址10.110.129.10上面你做了一個WEB網頁想給外網訪問。那麼你就需要將你路由器上WAN口的IP地址的對應80埠映射到10.110.129.10就可以供外網設備訪問。
在TCP/IP協議中,我們需要了解兩種IP地址,一個是可以直接訪問Internet的公網IP地址,另一種是我們組建區域網時最常用到的私有IP地址。如192.168.1.2的IP地址,這個地址就是一個私有地址,它在全球網路中不具唯一性,可以在全球任何一個地方的網路中使用,而公網IP地址在全球網路中是唯一的,主要是起標識不同網路的作用。在互聯網中,正是因為有這樣的公網IP地址,我們的通信才可以得以實現。
但是由於目前公網主要採用的是IPv4,IP地址資源日益耗盡,我們不可能在一個網路中申請到很多個可以在互聯網上直接通信的公有IP地址。這時,我們就會使用到NAT技術,它可以將區域網中的如192.168.1.2的私有地址轉換為可以在Internet使用的IP地址。從而達到訪問Internet的目的。
目前ADSL普遍採用的是NAT技術中的PAT(Port Address Translation)技術,它將內部地址映射到路由器WAN埠上的的一個全球唯一的公網IP 地址上,同時在該地址上加上一個由路由器選定的TCP或UDP埠號。
❼ 實時傳輸協議是什麼意思
實時傳輸協議RTP(Real-time Transport Protocol)是一個網路傳輸協議,它是由IETF的多媒體傳輸工作小組1996年在RFC 1889中公布的,後專在RFC3550中進行屬更新。
國際電信聯盟ITU-T也發布了自己的RTP文檔,作為H.225.0,但是後來當IETF發布了關於它的穩定的標准RFC後就被取消了。它作為網際網路標准在RFC 3550(該文檔的舊版本是RFC 1889)有詳細說明。RFC 3551(STD 65,舊版本是RFC 1890)詳細描述了使用最小控制的音頻和視頻會議。
RTP協議詳細說明了在互聯網上傳遞音頻和視頻的標准數據包格式。它一開始被設計為一個多播協議,但後來被用在很多單播應用中。RTP協議常用於流媒體系統(配合RTSP協議),視頻會議和一鍵通(Push to Talk)系統(配合H.323或SIP),使它成為IP電話產業的技術基礎。RTP協議和RTP控制協議RTCP一起使用,而且它是建立在用戶數據報協議上的。RTP廣泛應用於流媒體相關的通訊和娛樂,包括電話、視頻會議、電視和基於網路的一鍵通業務(類似對講機的通話)。
❽ 怎麼用C/C++編寫發送tcp/ip協議中的syn包
要先裝pcap,用Winpcap構造 SYN的數據包
#include<iostream>
usingnamespacestd;
#include<pcap/pcap.h>
#pragmacomment(lib,"wpcap.lib")//要先裝pcap,用Winpcap構造SYN的數據包
#include<winsock2.h>
#pragmacomment(lib,"ws2_32.lib")
#include"Packet_Header.h"
#defineMSG_MAXLEN58
USHORTchecksum(USHORT*buf,intsize)
{
ULONGcksum=0;
while(size>1)
{
cksum+=*buf++;
size-=sizeof(USHORT);
}
if(size)
{
cksum+=*(USHORT*)buf;
}
cksum=(cksum>>16)+(cksum&0xffff);
cksum+=(cksum>>16);
return(USHORT)(~cksum);
}
intmain()
{
pcap_if_t*alldevs;
charerrbuf[PCAP_ERRBUF_SIZE]={};
if(-1==pcap_findalldevs(&alldevs,errbuf))
{
cout<<"Getdevlisterror"<<endl;
return-1;
}
for(pcap_if_t*d=alldevs;NULL!=d;d=d->next)
{
cout<<d->description<<endl;
}
pcap_t*pt=pcap_open_live(alldevs->name,65536,true,20,errbuf);
if(NULL==pt)
{
cout<<"Opendeverror"<<endl;
return-1;
}
UCHARSendMsg[MSG_MAXLEN]={0};
PETHERHDRpethhdr=(PETHERHDR)SendMsg;
pethhdr->ethDst[0]=0x00;//mac
pethhdr->ethDst[1]=0x21;
pethhdr->ethDst[2]=0x85;
pethhdr->ethDst[3]=0x02;
pethhdr->ethDst[4]=0x30;
pethhdr->ethDst[5]=0x4e;
pethhdr->ethSrc[0]=0x00;
pethhdr->ethSrc[1]=0x23;
pethhdr->ethSrc[2]=0x8b;
pethhdr->ethSrc[3]=0xb6;
pethhdr->ethSrc[4]=0xbd;
pethhdr->ethSrc[5]=0xd7;
pethhdr->ethtype=htons(0x0800);
/*IPheader*/
PIPHDRpiphdr=(PIPHDR)(SendMsg+sizeof(ETHERHDR));
piphdr->ipv_l=(4<<4|(sizeof(IPHDR)/sizeof(ULONG)));
piphdr->iptos=0;
piphdr->iplen=htons(sizeof(SendMsg)-sizeof(ETHERHDR));
//piphdr->ipID=htons(0x1234);//0xede6
piphdr->ipTTL=58;
piphdr->ipCheckSum=0;
piphdr->ipProtocol=IPPROTO_TCP;
piphdr->ipSrc=inet_addr("192.168.0.183");
piphdr->ipDst=inet_addr("119.75.217.109");//119.75.217.109
//發送給網路(ip119.75.217.109:80)
piphdr->ipCheckSum=checksum((USHORT*)piphdr,sizeof(IPHDR));
/*TCPheader*/
PTCPHDRptcphdr=(PTCPHDR)(SendMsg+sizeof(ETHERHDR)+sizeof(IPHDR));
ptcphdr->tcpSrcPort=htons(44523);
ptcphdr->tcpDstPort=htons(80);
ptcphdr->tcpSeq=htonl(0x7d2cb526);//0x7d2cb526
ptcphdr->tcpAck=htonl(0);
ptcphdr->tcpl_r=((sizeof(TCPHDR)/sizeof(ULONG))<<4|0);
ptcphdr->tcpFlags=2;
ptcphdr->tcpWnd=htons(2048);
ptcphdr->tcpChkSum=0;
ptcphdr->tcpUrp=0;
UCHAR*tmpbuf=newUCHAR[sizeof(SendMsg)-sizeof(ETHERHDR)-sizeof(IPHDR)+sizeof(PSDHDR)];
memset(tmpbuf,0,sizeof(TCPHDR)+sizeof(PSDHDR));
PPSDHDRppsdhdr=(PPSDHDR)tmpbuf;
ppsdhdr->psdSrcAddr=piphdr->ipSrc;
ppsdhdr->psdDstAddr=piphdr->ipDst;
ppsdhdr->psdzero=0;
ppsdhdr->psdProto=IPPROTO_TCP;
ppsdhdr->psdPackLen=htons(sizeof(SendMsg)-sizeof(ETHERHDR)-sizeof(IPHDR));
memcpy(tmpbuf+sizeof(PSDHDR),SendMsg+sizeof(ETHERHDR)+sizeof(IPHDR),sizeof(tmpbuf+sizeof(PSDHDR)));
ptcphdr->tcpChkSum=checksum((USHORT*)tmpbuf,sizeof(SendMsg)-sizeof(ETHERHDR)-sizeof(IPHDR));
if(0!=pcap_sendpacket(pt,SendMsg,sizeof(SendMsg)))
{
cout<<"Error"<<endl;
}
system("pause");
return0;
}
❾ smtp協議的實現問題
好多種情況
一是base64編碼本身, 以前我測試163, 用戶和 密碼 必須已3的倍數, 後來找到原因是加密問題專
二是2007年以後注冊屬的163郵箱, 不提供免費smtp
三返回失敗的代碼是多少? 500還是504...
❿ 什麼是pop3和smtp
POP3 --- 接收
POP3是Post Office Protocol 3的簡稱,即郵局協議的第3個版本,它規定怎樣將個人計算機連接到Internet的郵件伺服器和下載電子郵件的電子協議。
它是網際網路電子郵件的第一個離線協議標准,POP3允許用戶從伺服器上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件伺服器上的郵件,而POP3伺服器則是遵循POP3協議的接收郵件伺服器,用來接收電子郵件的。
SMTP --- 發送
SMTP的全稱是「Simple Mail Transfer Protocol」,即簡單郵件傳輸協議。它是一組用於從源地址到目的地址傳輸郵件的規范,通過它來控制郵件的中轉方式。
SMTP 協議屬於 TCP/IP 協議簇,它幫助每台計算機在發送或中轉信件時找到下一個目的地。SMTP 伺服器就是遵循 SMTP 協議的發送郵件伺服器。
(10)std協議擴展閱讀:
IMAP和POP3的區別:
POP3協議允許電子郵件客戶端下載伺服器上的郵件,但是在客戶端的操作(如移動郵件、標記已讀等),不會反饋到伺服器上,比如通過客戶端收取了郵箱中的3封郵件並移動到其他文件夾,郵箱伺服器上的這些郵件是沒有同時被移動的 。
而IMAP提供webmail 與電子郵件客戶端之間的雙向通信,客戶端的操作都會反饋到伺服器上,對郵件進行的操作,伺服器上的郵件也會做相應的動作。
同時,IMAP像POP3那樣提供了方便的郵件下載服務,讓用戶能進行離線閱讀。IMAP提供的摘要瀏覽功能可以讓你在閱讀完所有的郵件到達時間、主題、發件人、大小等信息後才作出是否下載的決定。此外,IMAP更好地支持了從多個不同設備中隨時訪問新郵件。