7월 1일 zterm 3handshake개념
위의 그림중 첫 번째 if문은 에러처리부분.
2번 째 if문 본인의 ip주소와 비교하는 부분이다. 이것과 비교하여 0이면, strcmp()함수는 정상 종료이면 0을
반환한다. 0이 아니면, 비정상 종료.
그리고 tcp와 ip가
세 번째 if문에서 tcp의 source와 dest가 포트번호 9999와 같지 않으면, 에러처리. 즉, 포트번호 9999일 때, 반응하도록
설계함.
위의 그림은 원래 L3_IP함수에서 잘라내어 붙여온 그림.
위 그림은 main()함수.
3handshake (3핸드쉐이크)
이 두개의 그림은 서로 동일한 설명을 하고 있다.
1. 송신측을 client, 수신측을 서버이다. 클라이언트가 먼저 서버로 신호를 보낸다. 그러면, 클라이언트의 syn bit와 act bit의 반응을 잘 살펴봐야 한다. 이때는 시퀀스(sync)비트가 1(여기서의 1은 신호)이 된고 ack비트는 0이 된다.
2. 네트워크 프로토콜에 의해서 syn을 받으면 반드시 ack를 돌려주어야 한다. 따라서 서버에서 ack을 돌려준다. 그런데 이상한 점은 syn또한 같이 주고 있다는 점이다. 여기서 주목해야 할 부분이다.
3. 시퀀스를 받았으므로 다시 ack을 돌려준다. 여기서 기존의 ack에서 +1한 만큼 더해서 보내진다. 결과 참고.
실행결과 1. 클라이언트가 처음 서버로 송신한 결과.
id번호, 그리고 시퀀스의 넘버가 보인다. 당연히 ack은 없기때문에 0이다.(참고로 번호는 난수 생성, 랜덤이다.)
2. 서버에서 받아서 다시 클라이언트로 보내는 부분.
id는 0이며, 시퀀스 넘버와 ack넘버가 둘 다 존재한다. 여기서 ack넘버를 잘 보면 위의 클라이언트의 시퀀스넘버에서 +1 더해진 값임을 알수 있다.
3.클라이언트에서 다시 ack을 전송하여야한다. 그래서 ack은 기존에 시퀀스넘버에서 1 더한 값이 아래 ack넘버로
들어가 있다. 여기서는 시퀀스는 0이 되어야 정상이다. 아래 그림은 시퀀스넘버에 기존에 있던 ack넘버가 그대로 들어왔다.
무언가 에러다. 원래는 여기에서 시퀀스는 0이 되어야 정상이다.