3. 개요
• 이름: Network Project(CSMA/CD + IP + TCP)
• 개발 인원: 1
• 기간: 2016.09 ~ 2016.12
• 개발 환경: sublime text3, ubuntu
• 사용 언어: python
• 링크: https://github.com/lights93/network_project
4. 소개
• 네트워크 구조
• router – 파란색
• end_node – 노란색
• port_number – 초록색
• bandwidth – 검은색
오른쪽의 그림과 같은 네트워크를
가정하여 구현했습니다.
5. 소개
• CSMA/CD 구현 내용
• 전송 중인 노드에서 다른 노드의 패킷의 첫 부분이 도착했을 때,
collision이 발생한 것을 확인하도록 구현
• CSMA/CD 지속 방식 중에 p-persistent를 이용하여 재충돌 방지
6. 소개
• IP(link state routing protocol) 구현 내용
• 각 router에서 다른 router로 가는 최단 경로를 Dijkstra 알고리즘으로
구하고, routing table 생성
• router들의 연결이 끊어지거나 새로 생길 수 있으므로, 각 router에서
주기적으로 version이 있는 패킷을 보내 자신의 정보를 알리도록 구현
7. 소개
• TCP 구현 내용
• 160bit의 TCP header 구현
• connection establishment process 구현
• connection termination process 구현
• congestion control 구현
• flow control 구현
8. 코드 설명
• 다른 노드로 부터 packet의 시작
부분이 도착했을 때, 현재 노드에서
도 패킷 전송을 하려고 했을 때,
collision임을 확인합니다.
• collision이 끝났을 때 p-persistent
방식으로 다시 전송을 시도하도록
타이머를 설정했습니다.
9. 코드 설명
• router의 연결이 끊어졌을 때,
r_list(라우터 리스트)에서 해당 router를
뺀 뒤, Dijkstra 알고리즘을 사용하여
새로운 router table을 생성합니다.
• 새로운 router가 연결됐을 때,
r_list(라우터 리스트)에 새로운 router를
추가한 뒤, Dijkstra 알고리즘을
사용하여 새로운 router table을
생성합니다.
10. 코드 설명
• 패킷을 받았을 때 TCP헤더를
확인합니다. ACK, SYN, FIN을
확인하여 받은 패킷을 상황에
맞게 처리합니다.
11. 코드 설명
• 전송하기 전에 받을 노드에 패킷을
저장할 공간이 있는 지 확인합니다.
공간이 없다면 probe 패킷을 보내
공간이 생기는 것을 확인합니다.
• timeout으로 재전송할 때는
congestionwindow를 1로 설정하고,
duplicated ack로 재전송할 때는
congestionwindow를 threshold
+2의 값으로 설정합니다.