The goal of this project is to gain some basic network protocol design and programming experience. You will develop an RFC for a protocol to support a simple text based bulletin board which permits both public and private messages to be posted and implement a client and a server that uses the protocol you defined in your RFC. The protocol you design should allow a user to post public messages on the bulletin board, which anyone can read, and private messages to a group that is identified by a group ID and available only to those users that know the group ID. You could think of public messages as a default group for which everyone knows the ID, if you wish. Your protocol should allow a new group to be established and ensure that it does not interact with an existing group (guarantee that a new group ID is not the same as an existing group ID). Your protocol should also allow the user to remove messages that they posted or groups that they created. No user should be able to remove a message they did not post to the bulletin board or a group they did not create. Any user should be able to post a message to the public bulletin board and to any private bulletin board for which they know the group ID. A user shall be able to request to see all messages from a group (group being either the public or the private bulletin board), all new messages posted to a group, or specific messages from a group. Messages should have a subject line and a user should be able to request a list of only the subject lines posted to a bulletin board. Messages may be of arbitrary length. Your protocol should provide reliable transfer of information between the client and the server. This can be achieved either in the protocol you design or by your choice of Transport protocol. A user should also be able to retrieve the total number of messages on a bulletin board and the total number of new messages on a bulletin board.