PROJECT 4: DNS =============== 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ID | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | Parameter | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | QDCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ANCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | NSCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ARCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ ID = monotonically increasing from client to server; copied by server Parameter = Bit 0 = 0 from client to server; 1 from server to client Bit 1-4 = 0 from client to server; copied by server Bit 5 = 1 from server to client QDCount = 1 from client; 0 from server ANCount = 0 from client; 1 from server NSCount = 0 from client; 1 from server ARCount = 0 from client; 1 from server Create client and server that exchange these messages. As given above, the field "parameter" has to be modified by the server after receiving the message from the client. The server also includes its own IP address after the header message given above. +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | SRV IP ADDR | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ That is, it adds the 4 byte field to the header above and sends it to the client. The client needs to print the IP address in dotted decimal notation after it receives the reply from the server. Send and receive multiple messages from the client to the server until a given number of messages have been sent. Accept the number of messages to be sent as a command line argument in the client. Group 13 : Implement as a TCP concurrent server with processes Group 2 : Implement as a UDP server with select